]>
Commit | Line | Data |
---|---|---|
e4276ba5 | 1 | // { dg-do run { target c++14 } } |
b008f16b | 2 | // { dg-options -w } |
48cff4fa ESR |
3 | |
4 | template<typename, typename> | |
5 | struct is_same | |
6 | { | |
7 | static constexpr bool value = false; | |
8 | }; | |
9 | ||
10 | template<typename _Tp> | |
11 | struct is_same<_Tp, _Tp> | |
12 | { | |
13 | static constexpr bool value = true; | |
14 | }; | |
15 | ||
16 | template<typename CharT, CharT... Str> | |
17 | struct Foo | |
18 | { | |
19 | using char_type = CharT; | |
20 | char_type chars[sizeof...(Str)]{Str...}; | |
21 | }; | |
22 | ||
23 | template<typename CharT, CharT... Str> | |
24 | Foo<CharT, Str...> | |
25 | operator""_foo() | |
26 | { | |
27 | return Foo<CharT, Str...>(); | |
28 | } | |
29 | ||
30 | int | |
31 | main() | |
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 | } |