// Test for explicit conversion ops from N2437. // { dg-do compile { target c++11 } } class U; class V; class T { public: T( U const & ); //implicit converting ctor explicit T( V const & ); // explicit ctor }; class U { }; class V { }; class W { public: operator T() const; }; class X { public: explicit operator T() const; // theoretical }; int main() { U u; V v; W w; X x; // Direct initialization: T t1( u ); T t2( v ); T t3( w ); T t4( x ); // Copy initialization: T t5 = u; T t6 = v; // { dg-error "" } T t7 = w; T t8 = x; // { dg-error "" } // Cast notation: T t9 = (T) u; T t10 = (T) v; T t11 = (T) w; T t12 = (T) x; // Static cast: T t13 = static_cast( u ); T t14 = static_cast( v ); T t15 = static_cast( w ); T t16 = static_cast( x ); // Function-style cast: T t17 = T( u ); T t18 = T( v ); T t19 = T( w ); T t20 = T( x ); return 0; }