@@ -31,7 +31,7 @@ using namespace tooling;
31
31
32
32
namespace {
33
33
34
- enum class StdVer { CXX98, CXX11, CXX14, CXX17, CXX2a };
34
+ enum class StdVer { CXX98, CXX11, CXX14, CXX17, CXX20 };
35
35
36
36
DeclarationMatcher FunctionBodyMatcher (StringRef ContainingFunction) {
37
37
return functionDecl (hasName (ContainingFunction),
@@ -67,7 +67,9 @@ PrintedStmtCXXMatches(StdVer Standard, StringRef Code, const T &NodeMatch,
67
67
case StdVer::CXX11: StdOpt = " -std=c++11" ; break ;
68
68
case StdVer::CXX14: StdOpt = " -std=c++14" ; break ;
69
69
case StdVer::CXX17: StdOpt = " -std=c++17" ; break ;
70
- case StdVer::CXX2a: StdOpt = " -std=c++2a" ; break ;
70
+ case StdVer::CXX20:
71
+ StdOpt = " -std=c++20" ;
72
+ break ;
71
73
}
72
74
73
75
std::vector<std::string> Args = {
@@ -146,6 +148,35 @@ TEST(StmtPrinter, TestFloatingPointLiteral) {
146
148
// Should be: with semicolon
147
149
}
148
150
151
+ TEST (StmtPrinter, TestStringLiteralOperatorTemplate_Pack) {
152
+ ASSERT_TRUE (PrintedStmtCXXMatches (StdVer::CXX11,
153
+ R"cpp(
154
+ template <char...> constexpr double operator""_c() { return 42; }
155
+ void A() {
156
+ constexpr auto waldo = 42_c;
157
+ }
158
+ )cpp" ,
159
+ FunctionBodyMatcher (" A" ),
160
+ " constexpr auto waldo = 42_c;\n " ));
161
+ }
162
+
163
+ TEST (StmtPrinter, TestStringLiteralOperatorTemplate_Class) {
164
+ ASSERT_TRUE (
165
+ PrintedStmtCXXMatches (StdVer::CXX20,
166
+ R"cpp(
167
+ struct C {
168
+ template <unsigned N> constexpr C(const char (&)[N]) : n(N) {}
169
+ unsigned n;
170
+ };
171
+ template <C c> constexpr auto operator""_c() { return c.n; }
172
+ void A() {
173
+ constexpr auto waldo = "abc"_c;
174
+ }
175
+ )cpp" ,
176
+ FunctionBodyMatcher (" A" ),
177
+ " constexpr auto waldo = operator\"\" _c<{4}>();\n " ));
178
+ }
179
+
149
180
TEST (StmtPrinter, TestCXXConversionDeclImplicit) {
150
181
ASSERT_TRUE (PrintedStmtCXXMatches (
151
182
StdVer::CXX98,
0 commit comments