1*89a1d03eSRichard // RUN: %check_clang_tidy %s readability-redundant-string-init %t
2*89a1d03eSRichard 
3*89a1d03eSRichard namespace std {
4*89a1d03eSRichard template <typename T>
5*89a1d03eSRichard class allocator {};
6*89a1d03eSRichard template <typename T>
7*89a1d03eSRichard class char_traits {};
8*89a1d03eSRichard template <typename C, typename T = std::char_traits<C>, typename A = std::allocator<C>>
9*89a1d03eSRichard struct basic_string {
10*89a1d03eSRichard   basic_string();
11*89a1d03eSRichard   basic_string(const basic_string&);
12*89a1d03eSRichard   // MSVC headers define two constructors instead of using optional arguments.
13*89a1d03eSRichard   basic_string(const C *);
14*89a1d03eSRichard   basic_string(const C *, const A &);
15*89a1d03eSRichard   ~basic_string();
16*89a1d03eSRichard };
17*89a1d03eSRichard typedef basic_string<char> string;
18*89a1d03eSRichard typedef basic_string<wchar_t> wstring;
19*89a1d03eSRichard }
20*89a1d03eSRichard 
f()21*89a1d03eSRichard void f() {
22*89a1d03eSRichard   std::string a = "";
23*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:15: warning: redundant string initialization [readability-redundant-string-init]
24*89a1d03eSRichard   // CHECK-FIXES: std::string a;
25*89a1d03eSRichard   std::string b("");
26*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:15: warning: redundant string initialization
27*89a1d03eSRichard   // CHECK-FIXES: std::string b;
28*89a1d03eSRichard   std::string c = R"()";
29*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:15: warning: redundant string initialization
30*89a1d03eSRichard   // CHECK-FIXES: std::string c;
31*89a1d03eSRichard   std::string d(R"()");
32*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:15: warning: redundant string initialization
33*89a1d03eSRichard   // CHECK-FIXES: std::string d;
34*89a1d03eSRichard 
35*89a1d03eSRichard   std::string u = "u";
36*89a1d03eSRichard   std::string w("w");
37*89a1d03eSRichard   std::string x = R"(x)";
38*89a1d03eSRichard   std::string y(R"(y)");
39*89a1d03eSRichard   std::string z;
40*89a1d03eSRichard }
41*89a1d03eSRichard 
g()42*89a1d03eSRichard void g() {
43*89a1d03eSRichard   std::wstring a = L"";
44*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:16: warning: redundant string initialization
45*89a1d03eSRichard   // CHECK-FIXES: std::wstring a;
46*89a1d03eSRichard   std::wstring b(L"");
47*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:16: warning: redundant string initialization
48*89a1d03eSRichard   // CHECK-FIXES: std::wstring b;
49*89a1d03eSRichard   std::wstring c = LR"()";
50*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:16: warning: redundant string initialization
51*89a1d03eSRichard   // CHECK-FIXES: std::wstring c;
52*89a1d03eSRichard   std::wstring d(LR"()");
53*89a1d03eSRichard   // CHECK-MESSAGES: [[@LINE-1]]:16: warning: redundant string initialization
54*89a1d03eSRichard   // CHECK-FIXES: std::wstring d;
55*89a1d03eSRichard 
56*89a1d03eSRichard   std::wstring u = L"u";
57*89a1d03eSRichard   std::wstring w(L"w");
58*89a1d03eSRichard   std::wstring x = LR"(x)";
59*89a1d03eSRichard   std::wstring y(LR"(y)");
60*89a1d03eSRichard   std::wstring z;
61*89a1d03eSRichard }
62