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