annotate gcc/testsuite/g++.dg/cpp2a/pr88534.C @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 // { dg-do compile { target c++2a } }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 // { dg-options "-g" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 typedef __SIZE_TYPE__ size_t;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 namespace std
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 template <typename T, T... I>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 struct integer_sequence
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 typedef T value_type;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 static constexpr size_t size () noexcept { return sizeof...(I); }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 template <typename T, T N>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 using make_integer_sequence = integer_sequence<T, __integer_pack (N)...>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 template <size_t... I>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 using index_sequence = integer_sequence<size_t, I...>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 template <size_t N>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 using make_index_sequence = make_integer_sequence<size_t, N>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 template <typename T, size_t N> struct S
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 T content[N];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 using char_type = T;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 template <size_t... I>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 constexpr S (const T (&input)[N], std::index_sequence<I...>) noexcept : content{input[I]...} { }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 constexpr S (const T (&input)[N]) noexcept : S (input, std::make_index_sequence<N> ()) { }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 constexpr size_t size () const noexcept
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 if (content[N - 1] == '\0')
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 return N - 1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 return N;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 constexpr T operator[] (size_t i) const noexcept
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 return content[i];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 constexpr const T *begin () const noexcept
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 return content;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 constexpr const T *end () const noexcept
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 return content + size ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 template <typename T, size_t N> S (const T (&)[N]) -> S<T, N>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 template <S S>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 struct F
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 auto
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 foo ()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 F<"test"> f;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 }