xref: /aosp_15_r20/external/clang/test/SemaTemplate/dependent-base-member-init.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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