xref: /aosp_15_r20/external/clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
2*67e74705SXin Li 
3*67e74705SXin Li struct NoDefault {
4*67e74705SXin Li   NoDefault() = delete; // expected-note {{here}}
5*67e74705SXin Li   NoDefault(int);
6*67e74705SXin Li };
7*67e74705SXin Li struct Explicit { // expected-note 2 {{candidate}} expected-note {{here}}
8*67e74705SXin Li   explicit Explicit(int);
9*67e74705SXin Li };
10*67e74705SXin Li struct NoCopy {
11*67e74705SXin Li   NoCopy();
12*67e74705SXin Li   NoCopy(const NoCopy &) = delete; // expected-note {{here}}
13*67e74705SXin Li };
14*67e74705SXin Li struct NoMove {
15*67e74705SXin Li   NoMove();
16*67e74705SXin Li   NoMove(NoMove &&) = delete; // expected-note {{here}}
17*67e74705SXin Li };
18*67e74705SXin Li class Private {
19*67e74705SXin Li   Private(int); // expected-note {{here}}
20*67e74705SXin Li public:
21*67e74705SXin Li   Private();
22*67e74705SXin Li };
23*67e74705SXin Li class Friend {
24*67e74705SXin Li   friend class S;
25*67e74705SXin Li   Friend(int);
26*67e74705SXin Li };
27*67e74705SXin Li 
28*67e74705SXin Li 
29*67e74705SXin Li class S {
30*67e74705SXin Li   NoDefault nd1;
31*67e74705SXin Li   NoDefault nd2 = 42;
32*67e74705SXin Li   Explicit e1; // expected-note {{here}}
33*67e74705SXin Li   Explicit e2 = 42; // expected-error {{no viable conversion}}
34*67e74705SXin Li   NoCopy nc = NoCopy(); // expected-error {{call to deleted}}
35*67e74705SXin Li   NoMove nm = NoMove(); // expected-error {{call to deleted}}
36*67e74705SXin Li   Private p = 42; // expected-error {{private constructor}}
37*67e74705SXin Li   Friend f = 42;
38*67e74705SXin Li 
S()39*67e74705SXin Li   S() {} // expected-error {{call to deleted constructor of 'NoDefault'}} \
40*67e74705SXin Li             expected-error {{must explicitly initialize the member 'e1' which does not have a default constructor}}
S(int)41*67e74705SXin Li   S(int) : nd1(42), e1(42) {}
42*67e74705SXin Li };
43*67e74705SXin Li 
44*67e74705SXin Li // FIXME: test the other forms which use copy-initialization
45