1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li // expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li // PR4381 5*67e74705SXin Li template<class T> struct X {}; 6*67e74705SXin Li template<typename T> struct Y : public X<T>::X { }; 7*67e74705SXin Li 8*67e74705SXin Li // PR4621 9*67e74705SXin Li class A1 { A1(int x)10*67e74705SXin Li A1(int x) {} 11*67e74705SXin Li }; 12*67e74705SXin Li template<class C> class B1 : public A1 { B1(C x)13*67e74705SXin Li B1(C x) : A1(x.x) {} 14*67e74705SXin Li }; 15*67e74705SXin Li class A2 { A2(int x, int y); }; 16*67e74705SXin Li template <class C> class B2 { 17*67e74705SXin Li A2 x; B2(C x)18*67e74705SXin Li B2(C x) : x(x.x, x.y) {} 19*67e74705SXin Li }; 20*67e74705SXin Li template <class C> class B3 { 21*67e74705SXin Li C x; B3()22*67e74705SXin Li B3() : x(1,2) {} 23*67e74705SXin Li }; 24*67e74705SXin Li 25*67e74705SXin Li // PR4627 26*67e74705SXin Li template<typename _Container> class insert_iterator { 27*67e74705SXin Li _Container* container; insert_iterator(_Container & __x)28*67e74705SXin Li insert_iterator(_Container& __x) : container(&__x) {} 29*67e74705SXin Li }; 30*67e74705SXin Li 31*67e74705SXin Li // PR4763 32*67e74705SXin Li template<typename T> struct s0 {}; 33*67e74705SXin Li template<typename T> struct s0_traits {}; 34*67e74705SXin Li template<typename T> struct s1 : s0<typename s0_traits<T>::t0> { s1s135*67e74705SXin Li s1() {} 36*67e74705SXin Li }; 37*67e74705SXin Li 38*67e74705SXin Li // PR6062 39*67e74705SXin Li namespace PR6062 { 40*67e74705SXin Li template <typename T> 41*67e74705SXin Li class A : public T::type 42*67e74705SXin Li { A()43*67e74705SXin Li A() : T::type() 44*67e74705SXin Li { 45*67e74705SXin Li } 46*67e74705SXin Li 47*67e74705SXin Li template <typename U> A(U const & init)48*67e74705SXin Li A(U const& init) 49*67e74705SXin Li : T::type(init) 50*67e74705SXin Li { } 51*67e74705SXin Li 52*67e74705SXin Li template<typename U> A(U & init)53*67e74705SXin Li A(U& init) : U::other_type(init) { } 54*67e74705SXin Li }; 55*67e74705SXin Li } 56*67e74705SXin Li 57*67e74705SXin Li template<typename T, typename U> 58*67e74705SXin Li struct X0 : T::template apply<U> { X0X059*67e74705SXin Li X0(int i) : T::template apply<U>(i) { } 60*67e74705SXin Li }; 61*67e74705SXin Li 62*67e74705SXin Li // PR7698 63*67e74705SXin Li namespace PR7698 { 64*67e74705SXin Li template<typename Type> 65*67e74705SXin Li class A { 66*67e74705SXin Li char mA[sizeof(Type *)]; A()67*67e74705SXin Li A(): mA() {} 68*67e74705SXin Li }; 69*67e74705SXin Li } 70