1 // RUN: clang-cc -fsyntax-only -verify %s 2 class X { 3 public: 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 16 operator int(); // expected-error{{conversion function must be a non-static member function}} 17 18 operator int; // expected-error{{'operator int' cannot be the name of a variable or data member}} 19 20 typedef int func_type(int); 21 typedef int array_type[10]; 22 23 class Y { 24 public: 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 28 operator float(...) const; // expected-error{{conversion function cannot be variadic}} 29 30 31 operator func_type(); // expected-error{{conversion function cannot convert to a function type}} 32 operator array_type(); // expected-error{{conversion function cannot convert to an array type}} 33 }; 34 35 36 typedef int INT; 37 typedef INT* INT_PTR; 38 39 class Z { 40 operator int(); // expected-note {{previous declaration is here}} 41 operator int**(); // expected-note {{previous declaration is here}} 42 43 operator INT(); // expected-error{{conversion function cannot be redeclared}} 44 operator INT_PTR*(); // expected-error{{conversion function cannot be redeclared}} 45 }; 46 47 48 class A { }; 49 50 class B : public A { 51 public: 52 operator A&() const; // expected-warning{{conversion function converting 'class B' to its base class 'class A' will never be used}} 53 operator const void() const; // expected-warning{{conversion function converting 'class B' to 'void const' will never be used}} 54 operator const B(); // expected-warning{{conversion function converting 'class B' to itself will never be used}} 55 }; 56 57 // This used to crash Clang. 58 struct Flip; 59 struct Flop { 60 Flop(); 61 Flop(const Flip&); 62 }; 63 struct Flip { 64 operator Flop() const; 65 }; 66 Flop flop = Flip(); // expected-error {{cannot initialize 'flop' with an rvalue of type 'struct Flip'}} 67