https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88534
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2018-12-18 CC| |jakub at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Adjusted testcase without #includes: typedef __SIZE_TYPE__ size_t; namespace std { template <typename T, T... I> struct integer_sequence { typedef T value_type; static constexpr size_t size () noexcept { return sizeof...(I); } }; template <typename T, T N> using make_integer_sequence = integer_sequence<T, __integer_pack (N)...>; template <size_t... I> using index_sequence = integer_sequence<size_t, I...>; template <size_t N> using make_index_sequence = make_integer_sequence<size_t, N>; } template <typename T, size_t N> struct S { T content[N]; using char_type = T; template <size_t... I> constexpr S (const T (&input)[N], std::index_sequence<I...>) noexcept : content{input[I]...} { } constexpr S (const T (&input)[N]) noexcept : S (input, std::make_index_sequence<N> ()) { } constexpr size_t size () const noexcept { if (content[N - 1] == '\0') return N - 1; else return N; } constexpr T operator[] (size_t i) const noexcept { return content[i]; } constexpr const T *begin () const noexcept { return content; } constexpr const T *end () const noexcept { return content + size (); } }; template <typename T, size_t N> S (const T (&)[N]) -> S<T, N>; template <S S> struct F { }; auto foo () { F<"test"> f; } ICEs with just -std=c++2a -g.