@@ -161,7 +161,7 @@ void call_by_cref(const S&);
161
161
162
162
void call (const char *);
163
163
164
- const char * test (bool b1, bool b2) {
164
+ const char * test1 (bool b1, bool b2) {
165
165
auto s1 = std::string (" hello" ).c_str (); // BAD
166
166
auto s2 = b1 ? std::string (" hello" ).c_str () : " " ; // BAD
167
167
auto s3 = b2 ? " " : std::string (" hello" ).c_str (); // BAD
@@ -186,3 +186,28 @@ const char* test(bool b1, bool b2) {
186
186
187
187
return std::string (" hello" ).c_str (); // BAD
188
188
}
189
+
190
+ void test2 (bool b1, bool b2) {
191
+ std::string s (" hello" );
192
+ auto s1 = s.c_str (); // GOOD
193
+ auto s2 = b1 ? s.c_str () : " " ; // GOOD
194
+ auto s3 = b2 ? " " : s.c_str (); // GOOD
195
+ const char * s4;
196
+ s4 = s.c_str (); // GOOD
197
+
198
+ std::string& sRef = s;
199
+
200
+ auto s5 = sRef .c_str (); // GOOD
201
+ auto s6 = b1 ? sRef .c_str () : " " ; // GOOD
202
+ auto s7 = b2 ? " " : sRef .c_str (); // GOOD
203
+ const char * s8;
204
+ s8 = sRef .c_str (); // GOOD
205
+
206
+ std::string&& sRefRef = std::string (" hello" );
207
+
208
+ auto s9 = sRefRef .c_str (); // GOOD
209
+ auto s10 = b1 ? sRefRef .c_str () : " " ; // GOOD
210
+ auto s11 = b2 ? " " : sRefRef .c_str (); // GOOD
211
+ const char * s12;
212
+ s12 = sRefRef .c_str (); // GOOD
213
+ }
0 commit comments