1*67e74705SXin Li // RUN: %clang_cc1 -std=c++98 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 2*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 3*67e74705SXin Li // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 4*67e74705SXin Li // RUN: %clang_cc1 -std=c++1z %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 5*67e74705SXin Li 6*67e74705SXin Li #if __cplusplus < 201103L 7*67e74705SXin Li // expected-no-diagnostics 8*67e74705SXin Li #endif 9*67e74705SXin Li 10*67e74705SXin Li namespace std { 11*67e74705SXin Li __extension__ typedef __SIZE_TYPE__ size_t; 12*67e74705SXin Li 13*67e74705SXin Li template<typename T> struct initializer_list { 14*67e74705SXin Li const T *p; size_t n; 15*67e74705SXin Li initializer_list(const T *p, size_t n); 16*67e74705SXin Li }; 17*67e74705SXin Li } 18*67e74705SXin Li 19*67e74705SXin Li namespace dr990 { // dr990: 3.5 20*67e74705SXin Li #if __cplusplus >= 201103L 21*67e74705SXin Li struct A { // expected-note 2{{candidate}} 22*67e74705SXin Li A(std::initializer_list<int>); // expected-note {{candidate}} 23*67e74705SXin Li }; 24*67e74705SXin Li struct B { 25*67e74705SXin Li A a; 26*67e74705SXin Li }; 27*67e74705SXin Li B b1 { }; 28*67e74705SXin Li B b2 { 1 }; // expected-error {{no viable conversion from 'int' to 'dr990::A'}} 29*67e74705SXin Li B b3 { { 1 } }; 30*67e74705SXin Li 31*67e74705SXin Li struct C { 32*67e74705SXin Li C(); 33*67e74705SXin Li C(int); 34*67e74705SXin Li C(std::initializer_list<int>) = delete; // expected-note {{here}} 35*67e74705SXin Li }; 36*67e74705SXin Li C c1[3] { 1 }; // ok 37*67e74705SXin Li C c2[3] { 1, {2} }; // expected-error {{call to deleted}} 38*67e74705SXin Li 39*67e74705SXin Li struct D { 40*67e74705SXin Li D(); 41*67e74705SXin Li D(std::initializer_list<int>); 42*67e74705SXin Li D(std::initializer_list<double>); 43*67e74705SXin Li }; 44*67e74705SXin Li D d{}; 45*67e74705SXin Li #endif 46*67e74705SXin Li } 47*67e74705SXin Li 48*67e74705SXin Li namespace dr948 { // dr948: 3.7 49*67e74705SXin Li #if __cplusplus >= 201103L 50*67e74705SXin Li class A { 51*67e74705SXin Li public: A(int v)52*67e74705SXin Li constexpr A(int v) : v(v) { } operator int() const53*67e74705SXin Li constexpr operator int() const { return v; } 54*67e74705SXin Li private: 55*67e74705SXin Li int v; 56*67e74705SXin Li }; 57*67e74705SXin Li id(int x)58*67e74705SXin Li constexpr int id(int x) 59*67e74705SXin Li { 60*67e74705SXin Li return x; 61*67e74705SXin Li } 62*67e74705SXin Li f()63*67e74705SXin Li void f() { 64*67e74705SXin Li if (constexpr int i = id(101)) { } 65*67e74705SXin Li switch (constexpr int i = id(2)) { default: break; case 2: break; } 66*67e74705SXin Li for (; constexpr int i = id(0); ) { } 67*67e74705SXin Li while (constexpr int i = id(0)) { } 68*67e74705SXin Li 69*67e74705SXin Li if (constexpr A i = 101) { } 70*67e74705SXin Li switch (constexpr A i = 2) { default: break; case 2: break; } 71*67e74705SXin Li for (; constexpr A i = 0; ) { } 72*67e74705SXin Li while (constexpr A i = 0) { } 73*67e74705SXin Li } 74*67e74705SXin Li #endif 75*67e74705SXin Li } 76