1 | // RUN: %clang_cc1 -verify %s |
2 | // RUN: %clang_cc1 -verify -std=c++98 %s |
3 | // RUN: %clang_cc1 -verify -std=c++11 %s |
4 | |
5 | class A { |
6 | public: |
7 | explicit A(); |
8 | |
9 | explicit operator int(); |
10 | #if __cplusplus <= 199711L // C++03 or earlier modes |
11 | // expected-warning@-2 {{explicit conversion functions are a C++11 extension}} |
12 | #endif |
13 | |
14 | explicit void f0(); // expected-error {{'explicit' can only be applied to a constructor or conversion function}} |
15 | |
16 | operator bool(); |
17 | }; |
18 | |
19 | explicit A::A() { } // expected-error {{'explicit' can only be specified inside the class definition}} |
20 | explicit A::operator bool() { return false; } |
21 | #if __cplusplus <= 199711L // C++03 or earlier modes |
22 | // expected-warning@-2 {{explicit conversion functions are a C++11 extension}} |
23 | #endif |
24 | // expected-error@-4 {{'explicit' can only be specified inside the class definition}} |
25 | |
26 | class B { |
27 | friend explicit A::A(); // expected-error {{'explicit' is invalid in friend declarations}} |
28 | }; |
29 | |