]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/g++.dg/cpp1y/pr58708.C
Implement UDL changes from P0732R2.
[thirdparty/gcc.git] / gcc / testsuite / g++.dg / cpp1y / pr58708.C
CommitLineData
e4276ba5 1// { dg-do run { target c++14 } }
b008f16b 2// { dg-options -w }
48cff4fa
ESR
3
4template<typename, typename>
5 struct is_same
6 {
7 static constexpr bool value = false;
8 };
9
10template<typename _Tp>
11 struct is_same<_Tp, _Tp>
12 {
13 static constexpr bool value = true;
14 };
15
16template<typename CharT, CharT... Str>
17 struct Foo
18 {
19 using char_type = CharT;
20 char_type chars[sizeof...(Str)]{Str...};
21 };
22
23template<typename CharT, CharT... Str>
24 Foo<CharT, Str...>
25 operator""_foo()
26 {
27 return Foo<CharT, Str...>();
28 }
29
30int
31main()
32{
33 auto fooU = U"\x10000\x10001\x10002"_foo;
34 if (is_same<decltype(fooU)::char_type, char32_t>::value != true) __builtin_abort();
35 if (sizeof(fooU.chars)/sizeof(char32_t) != 3) __builtin_abort();
36 if (fooU.chars[0] != 65536) __builtin_abort();
37 if (fooU.chars[1] != 65537) __builtin_abort();
38 if (fooU.chars[2] != 65538) __builtin_abort();
39
40 auto foo = "\x61\x62\x63"_foo;
41 if (is_same<decltype(foo)::char_type, char>::value != true) __builtin_abort();
42 if (sizeof(foo.chars)/sizeof(char) != 3) __builtin_abort();
43 if (foo.chars[0] != 97) __builtin_abort();
44 if (foo.chars[1] != 98) __builtin_abort();
45 if (foo.chars[2] != 99) __builtin_abort();
46
ae53cf85
DE
47#if __SIZEOF_WCHAR_T__ == 2
48 auto wfoo = L"\x0102\x0304"_foo;
49#else
50 auto wfoo = L"\x01020304\x05060708"_foo;
51#endif
48cff4fa
ESR
52 if (is_same<decltype(wfoo)::char_type, wchar_t>::value != true) __builtin_abort();
53 if (sizeof(wfoo.chars)/sizeof(wchar_t) != 2) __builtin_abort();
68f7e79e
DE
54#if __SIZEOF_WCHAR_T__ == 2
55 if (wfoo.chars[0] != 258) __builtin_abort();
56 if (wfoo.chars[1] != 772) __builtin_abort();
57#else
48cff4fa
ESR
58 if (wfoo.chars[0] != 16909060) __builtin_abort();
59 if (wfoo.chars[1] != 84281096) __builtin_abort();
68f7e79e 60#endif
48cff4fa
ESR
61
62 auto foou = u"\x0102\x0304\x0506\x0708"_foo;
63 if (is_same<decltype(foou)::char_type, char16_t>::value != true) __builtin_abort();
64 if (sizeof(foou.chars)/sizeof(char16_t) != 4) __builtin_abort();
65 if (foou.chars[0] != 258) __builtin_abort();
66 if (foou.chars[1] != 772) __builtin_abort();
67 if (foou.chars[2] != 1286) __builtin_abort();
68 if (foou.chars[3] != 1800) __builtin_abort();
69}