cxx11-user-defined-literals.cpp revision b453ad3214d00acc51c9aa702c76c58354d84b84
1// RUN: %clang_cc1 -std=c++11 -verify %s -fms-extensions -triple x86_64-apple-darwin9.0.0 2 3using size_t = decltype(sizeof(int)); 4enum class LitKind { 5 Char, WideChar, Char16, Char32, 6 CharStr, WideStr, Char16Str, Char32Str, 7 Integer, Floating 8}; 9constexpr LitKind operator"" _kind(char p) { return LitKind::Char; } 10constexpr LitKind operator"" _kind(wchar_t p) { return LitKind::WideChar; } 11constexpr LitKind operator"" _kind(char16_t p) { return LitKind::Char16; } 12constexpr LitKind operator"" _kind(char32_t p) { return LitKind::Char32; } 13constexpr LitKind operator"" _kind(const char *p, size_t n) { return LitKind::CharStr; } 14constexpr LitKind operator"" _kind(const wchar_t *p, size_t n) { return LitKind::WideStr; } 15constexpr LitKind operator"" _kind(const char16_t *p, size_t n) { return LitKind::Char16Str; } 16constexpr LitKind operator"" _kind(const char32_t *p, size_t n) { return LitKind::Char32Str; } 17constexpr LitKind operator"" _kind(unsigned long long n) { return LitKind::Integer; } 18constexpr LitKind operator"" _kind(long double n) { return LitKind::Floating; } 19 20static_assert('x'_kind == LitKind::Char, ""); 21static_assert(L'x'_kind == LitKind::WideChar, ""); 22static_assert(u'x'_kind == LitKind::Char16, ""); 23static_assert(U'x'_kind == LitKind::Char32, ""); 24static_assert("foo"_kind == LitKind::CharStr, ""); 25static_assert(u8"foo"_kind == LitKind::CharStr, ""); 26static_assert(L"foo"_kind == LitKind::WideStr, ""); 27static_assert(u"foo"_kind == LitKind::Char16Str, ""); 28static_assert(U"foo"_kind == LitKind::Char32Str, ""); 29static_assert(194_kind == LitKind::Integer, ""); 30static_assert(0377_kind == LitKind::Integer, ""); 31static_assert(0x5ffc_kind == LitKind::Integer, ""); 32static_assert(.5954_kind == LitKind::Floating, ""); 33static_assert(1._kind == LitKind::Floating, ""); 34static_assert(1.e-2_kind == LitKind::Floating, ""); 35static_assert(4e6_kind == LitKind::Floating, ""); 36