xref: /aosp_15_r20/external/clang/test/SemaTemplate/delegating-constructors.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
2*67e74705SXin Li 
3*67e74705SXin Li namespace PR10457 {
4*67e74705SXin Li 
5*67e74705SXin Li   class string
6*67e74705SXin Li   {
7*67e74705SXin Li     string(const char* str, unsigned);
8*67e74705SXin Li 
9*67e74705SXin Li   public:
10*67e74705SXin Li     template <unsigned N>
string(const char (& str)[N])11*67e74705SXin Li     string(const char (&str)[N])
12*67e74705SXin Li       : string(str) {} // expected-error{{constructor for 'string<6>' creates a delegation cycle}}
13*67e74705SXin Li   };
14*67e74705SXin Li 
f()15*67e74705SXin Li   void f() {
16*67e74705SXin Li     string s("hello");
17*67e74705SXin Li   }
18*67e74705SXin Li 
19*67e74705SXin Li   struct Foo {
FooPR10457::Foo20*67e74705SXin Li    Foo(int) { }
21*67e74705SXin Li 
22*67e74705SXin Li 
23*67e74705SXin Li    template <typename T>
FooPR10457::Foo24*67e74705SXin Li    Foo(T, int i) : Foo(i) { }
25*67e74705SXin Li };
26*67e74705SXin Li 
test_Foo()27*67e74705SXin Li   void test_Foo()
28*67e74705SXin Li   {
29*67e74705SXin Li     Foo f(1, 1);
30*67e74705SXin Li   }
31*67e74705SXin Li }
32*67e74705SXin Li 
33*67e74705SXin Li namespace PR12890 {
34*67e74705SXin Li   class Document
35*67e74705SXin Li   {
36*67e74705SXin Li   public:
37*67e74705SXin Li       Document() = default;
38*67e74705SXin Li 
39*67e74705SXin Li       template <class T>
40*67e74705SXin Li       explicit
Document(T && t)41*67e74705SXin Li       Document(T&& t) : Document()
42*67e74705SXin Li       {
43*67e74705SXin Li       }
44*67e74705SXin Li   };
f()45*67e74705SXin Li   void f()
46*67e74705SXin Li   {
47*67e74705SXin Li       Document d(1);
48*67e74705SXin Li   }
49*67e74705SXin Li }
50