45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
|
|
|
|
struct NoDefault {
|
|
NoDefault() = delete; // expected-note {{here}}
|
|
NoDefault(int);
|
|
};
|
|
struct Explicit { // expected-note 2 {{candidate}} expected-note {{here}}
|
|
explicit Explicit(int); // expected-note {{not a candidate}}
|
|
};
|
|
struct NoCopy {
|
|
NoCopy();
|
|
NoCopy(const NoCopy &) = delete; // expected-note {{here}}
|
|
};
|
|
struct NoMove {
|
|
NoMove();
|
|
NoMove(NoMove &&) = delete; // expected-note {{here}}
|
|
};
|
|
class Private {
|
|
Private(int); // expected-note {{here}}
|
|
public:
|
|
Private();
|
|
};
|
|
class Friend {
|
|
friend class S;
|
|
Friend(int);
|
|
};
|
|
|
|
|
|
class S {
|
|
NoDefault nd1;
|
|
NoDefault nd2 = 42;
|
|
Explicit e1; // expected-note {{here}}
|
|
Explicit e2 = 42; // expected-error {{no viable conversion}}
|
|
NoCopy nc = NoCopy(); // expected-error {{call to deleted}}
|
|
NoMove nm = NoMove(); // expected-error {{call to deleted}}
|
|
Private p = 42; // expected-error {{private constructor}}
|
|
Friend f = 42;
|
|
|
|
S() {} // expected-error {{call to deleted constructor of 'NoDefault'}} \
|
|
expected-error {{must explicitly initialize the member 'e1' which does not have a default constructor}}
|
|
S(int) : nd1(42), e1(42) {}
|
|
};
|
|
|
|
// FIXME: test the other forms which use copy-initialization
|