1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -verify %s 287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// RUN: %clang_cc1 -verify -std=c++98 %s 387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// RUN: %clang_cc1 -verify -std=c++11 %s 4cb8845f3e358b8583c41ba9bdb9165670900a8e2Daniel Dunbar 5cb8845f3e358b8583c41ba9bdb9165670900a8e2Daniel Dunbarclass A { 6cb8845f3e358b8583c41ba9bdb9165670900a8e2Daniel Dunbarpublic: 7cb8845f3e358b8583c41ba9bdb9165670900a8e2Daniel Dunbar explicit A(); 8cb8845f3e358b8583c41ba9bdb9165670900a8e2Daniel Dunbar 987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar explicit operator int(); 1087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#if __cplusplus <= 199711L // C++03 or earlier modes 1187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // expected-warning@-2 {{explicit conversion functions are a C++11 extension}} 1287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#endif 13cb8845f3e358b8583c41ba9bdb9165670900a8e2Daniel Dunbar 140757c8ccb79210ce1f22142851cdcbf6e42a71d6Anders Carlsson explicit void f0(); // expected-error {{'explicit' can only be applied to a constructor or conversion function}} 150757c8ccb79210ce1f22142851cdcbf6e42a71d6Anders Carlsson 160757c8ccb79210ce1f22142851cdcbf6e42a71d6Anders Carlsson operator bool(); 17cb8845f3e358b8583c41ba9bdb9165670900a8e2Daniel Dunbar}; 18cb8845f3e358b8583c41ba9bdb9165670900a8e2Daniel Dunbar 190757c8ccb79210ce1f22142851cdcbf6e42a71d6Anders Carlssonexplicit A::A() { } // expected-error {{'explicit' can only be specified inside the class definition}} 2087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarexplicit A::operator bool() { return false; } 2187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#if __cplusplus <= 199711L // C++03 or earlier modes 2287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// expected-warning@-2 {{explicit conversion functions are a C++11 extension}} 2387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#endif 2487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// expected-error@-4 {{'explicit' can only be specified inside the class definition}} 256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass B { 276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines friend explicit A::A(); // expected-error {{'explicit' is invalid in friend declarations}} 286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}; 29