conversion-function.cpp revision d7d5f0223bd30dfd618762349c6209dd1d5ea3e6
1// RUN: clang-cc -fsyntax-only -verify %s 2class X { 3public: 4 operator bool(); 5 operator int() const; 6 7 bool f() { 8 return operator bool(); 9 } 10 11 float g() { 12 return operator float(); // expected-error{{no matching function for call to 'operator float'}} 13 } 14}; 15 16operator int(); // expected-error{{conversion function must be a non-static member function}} 17 18operator int; // expected-error{{'operator int' cannot be the name of a variable or data member}} 19 20typedef int func_type(int); 21typedef int array_type[10]; 22 23class Y { 24public: 25 void operator bool(int, ...) const; // expected-error{{conversion function cannot have a return type}} \ 26 // expected-error{{conversion function cannot have any parameters}} \ 27 // expected-error{{conversion function cannot be variadic}} 28 operator func_type(); // expected-error{{conversion function cannot convert to a function type}} 29 operator array_type(); // expected-error{{conversion function cannot convert to an array type}} 30}; 31 32 33typedef int INT; 34typedef INT* INT_PTR; 35 36class Z { 37 operator int(); // expected-note {{previous declaration is here}} 38 operator int**(); // expected-note {{previous declaration is here}} 39 40 operator INT(); // expected-error{{conversion function cannot be redeclared}} 41 operator INT_PTR*(); // expected-error{{conversion function cannot be redeclared}} 42}; 43 44 45class A { }; 46 47class B : public A { 48public: 49 operator A&() const; // expected-warning{{conversion function converting 'class B' to its base class 'class A' will never be used}} 50 operator const void() const; // expected-warning{{conversion function converting 'class B' to 'void const' will never be used}} 51 operator const B(); // expected-warning{{conversion function converting 'class B' to itself will never be used}} 52}; 53