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