| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| struct ExplicitConvToBool { |
| explicit operator bool(); // expected-warning{{explicit conversion functions are a C++0x extension}} |
| void test_conv_to_bool(ConvToBool ctb, ConvToInt cti, ExplicitConvToBool ecb) { |
| void accepts_bool(bool) { } // expected-note{{candidate function}} |
| struct ExplicitConvToRef { |
| explicit operator int&(); // expected-warning{{explicit conversion functions are a C++0x extension}} |
| void test_explicit_bool(ExplicitConvToBool ecb) { |
| bool b2 = ecb; // expected-error{{incompatible type initializing 'struct ExplicitConvToBool', expected 'bool'}} |
| accepts_bool(ecb); // expected-error{{no matching function for call to}} |
| void test_explicit_conv_to_ref(ExplicitConvToRef ecr) { |
| int& i1 = ecr; // expected-error{{non-const lvalue reference to type 'int' cannot bind to a value of unrelated type 'struct ExplicitConvToRef'}} |
| explicit operator A&(); // expected-warning{{explicit conversion functions are a C++0x extension}} |
| operator B&(); // expected-note{{candidate}} |
| void test_copy_init_conversions(C c) { |
| A &a = c; // expected-error{{no viable conversion from 'struct C' to 'struct A'}} |