// RUN: %clang_cc1 -fsyntax-only -verify %s namespace PR5909 { struct Foo { int x : 20; }; bool Test(const int& foo); const Foo f = { 0 }; // It compiles without the 'const'. bool z = Test(f.x); } namespace PR6264 { typedef int (&T)[3]; struct S { operator T (); }; void f() { T bar = S(); } } namespace PR6066 { struct B { }; struct A : B { operator B*(); operator B&(); // expected-warning{{conversion function converting 'PR6066::A' to its base class 'PR6066::B' will never be used}} }; void f(B&); // no rvalues accepted void f(B*); int g() { f(A()); // calls f(B*) return 0; } } namespace test3 { struct A { unsigned bitX : 4; // expected-note 3 {{bit-field is declared here}} unsigned bitY : 4; // expected-note {{bit-field is declared here}} unsigned var; void foo(); }; void test(A *a) { unsigned &t0 = a->bitX; // expected-error {{non-const reference cannot bind to bit-field 'bitX'}} unsigned &t1 = (unsigned&) a->bitX; // expected-error {{C-style cast from bit-field lvalue to reference type 'unsigned int &'}} unsigned &t2 = const_cast<unsigned&>(a->bitX); // expected-error {{const_cast from bit-field lvalue to reference type 'unsigned int &'}} unsigned &t3 = (a->foo(), a->bitX); // expected-error {{non-const reference cannot bind to bit-field 'bitX'}} unsigned &t4 = (a->var ? a->bitX : a->bitY); // expected-error {{non-const reference cannot bind to bit-field}} unsigned &t5 = (a->var ? a->bitX : a->bitX); // expected-error {{non-const reference cannot bind to bit-field}} unsigned &t6 = (a->var ? a->bitX : a->var); // expected-error {{non-const reference cannot bind to bit-field}} unsigned &t7 = (a->var ? a->var : a->bitY); // expected-error {{non-const reference cannot bind to bit-field}} unsigned &t8 = (a->bitX = 3); // expected-error {{non-const reference cannot bind to bit-field 'bitX'}} unsigned &t9 = (a->bitY += 3); // expected-error {{non-const reference cannot bind to bit-field 'bitY'}} } } namespace explicit_ctor { struct A {}; struct B { // expected-note 2{{candidate}} explicit B(const A&); }; A a; const B &b(a); // expected-error {{no viable conversion}} } |