1// Test for explicit conversion ops from N2437. 2// { dg-options "-std=c++0x" } 3 4class U; class V; 5class T 6{ 7public: 8 T( U const & ); 9 //implicit converting ctor 10 explicit T( V const & ); 11 // explicit ctor 12}; 13class U 14{ 15}; 16class V 17{ 18}; 19class W 20{ 21public: 22 operator T() const; 23}; 24class X 25{ 26public: 27 explicit operator T() const; // theoretical 28}; 29int main() 30{ 31 U u; V v; W w; X x; 32 // Direct initialization: 33 T t1( u ); 34 T t2( v ); 35 T t3( w ); 36 T t4( x ); 37 // Copy initialization: 38 T t5 = u; 39 T t6 = v; // { dg-error "" } 40 T t7 = w; 41 T t8 = x; // { dg-error "" } 42 // Cast notation: 43 T t9 = (T) u; 44 T t10 = (T) v; 45 T t11 = (T) w; 46 T t12 = (T) x; 47 // Static cast: 48 T t13 = static_cast<T>( u ); 49 T t14 = static_cast<T>( v ); 50 T t15 = static_cast<T>( w ); 51 T t16 = static_cast<T>( x ); 52 // Function-style cast: 53 T t17 = T( u ); 54 T t18 = T( v ); 55 T t19 = T( w ); 56 T t20 = T( x ); 57 return 0; 58} 59