diff options
Diffstat (limited to 'test/Parser/cxx11-user-defined-literals.cpp')
-rw-r--r-- | test/Parser/cxx11-user-defined-literals.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/test/Parser/cxx11-user-defined-literals.cpp b/test/Parser/cxx11-user-defined-literals.cpp index c2d5af5c1d..e3f79ecc7c 100644 --- a/test/Parser/cxx11-user-defined-literals.cpp +++ b/test/Parser/cxx11-user-defined-literals.cpp @@ -44,11 +44,11 @@ constexpr const char16_t operator"" _id(const char16_t *p, size_t n) { return *p constexpr const char32_t operator"" _id(const char32_t *p, size_t n) { return *p; } template<int n> struct S {}; -S<"a"_id[0]> sa; -S<L"b"_id[0]> sb; -S<u8"c"_id[0]> sc; -S<u"d"_id[0]> sd; -S<U"e"_id[0]> se; +S<"a"_id> sa; +S<L"b"_id> sb; +S<u8"c"_id> sc; +S<u"d"_id> sd; +S<U"e"_id> se; S<'w'_id> sw; S<L'x'_id> sx; @@ -58,3 +58,15 @@ S<U'z'_id> sz; void h() { (void)"test"_id "test" L"test"; } + +enum class LitKind { CharStr, WideStr, Char16Str, Char32Str }; +constexpr LitKind operator"" _kind(const char *p, size_t n) { return LitKind::CharStr; } +constexpr LitKind operator"" _kind(const wchar_t *p, size_t n) { return LitKind::WideStr; } +constexpr LitKind operator"" _kind(const char16_t *p, size_t n) { return LitKind::Char16Str; } +constexpr LitKind operator"" _kind(const char32_t *p, size_t n) { return LitKind::Char32Str; } + +static_assert("foo"_kind == LitKind::CharStr, ""); +static_assert(u8"foo"_kind == LitKind::CharStr, ""); +static_assert(L"foo"_kind == LitKind::WideStr, ""); +static_assert(u"foo"_kind == LitKind::Char16Str, ""); +static_assert(U"foo"_kind == LitKind::Char32Str, ""); |