72 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -Wno-c23-extensions %s2// expected-no-diagnostics3 4namespace std {5typedef decltype(sizeof(int)) size_t;6 7template <class _E> class initializer_list {8 const _E *__begin_;9 size_t __size_;10 11 constexpr initializer_list(const _E *__b, size_t __s)12 : __begin_(__b), __size_(__s) {}13 14public:15 constexpr initializer_list() : __begin_(nullptr), __size_(0) {}16};17} // namespace std18 19template <typename T> struct S {20 S(std::initializer_list<T>);21};22 23template <> struct S<char> {24 S(std::initializer_list<char>);25};26 27struct S1 {28 S<char> data;29 int a;30};31 32template <typename _Tp, std::size_t _Nm> void to_array(_Tp (&&__a)[_Nm]) {}33 34 35template<typename T>36void tfn(T) {}37 38void tests() {39 40 S<char>{{41#embed __FILE__42 }};43 44 S1 ss{std::initializer_list<char>{45#embed __FILE__46 }};47 48 S sss = {49#embed __FILE__50 };51 52 std::initializer_list<int> il{53#embed __FILE__54 };55 56 static constexpr auto initializer_list = std::initializer_list<char>{57#embed __FILE__58 , '\0'};59 60 static constexpr auto intinitializer_list = std::initializer_list<int>{61#embed __FILE__62 , '\0'};63 64 to_array({65#embed __FILE__66 });67 68 tfn<std::initializer_list<int>>({69#embed __FILE__70 });71}72