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