Viewing file: pr88534.C (1.29 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// { dg-do compile { target c++20 } } // { dg-options "-g" }
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; }
|