Home | History | Annotate | Download | only in over.match.copy
      1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only %s -verify
      2 
      3 namespace ExplicitConv {
      4   struct X { }; // expected-note 2{{candidate constructor}}
      5 
      6   struct Y {
      7     explicit operator X() const;
      8   };
      9 
     10   void test(const Y& y) {
     11     X x(static_cast<X>(y));
     12     X x2((X)y);
     13     X x3 = y; // expected-error{{no viable conversion from 'const ExplicitConv::Y' to 'ExplicitConv::X'}}
     14   }
     15 }
     16 
     17 namespace DR899 {
     18   struct C { }; // expected-note 2 {{candidate constructor}}
     19 
     20   struct A {
     21     explicit operator int() const;
     22     explicit operator C() const;
     23   };
     24 
     25   struct B {
     26     int i;
     27     B(const A& a): i(a) { }
     28   };
     29 
     30   int main() {
     31     A a;
     32     int i = a; // expected-error{{no viable conversion}}
     33     int j(a);
     34     C c = a; // expected-error{{no viable conversion}}
     35     C c2(a);
     36   }
     37 }
     38