1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 251bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian 38dde14e7f43a4b29e592b3e8e576eb467ddb6c6eDouglas Gregorstruct A {}; 451bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian 551bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanianstruct BASE { 651bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian operator A(); // expected-note {{candidate function}} 751bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian}; 851bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian 951bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanianstruct BASE1 { 1051bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian operator A(); // expected-note {{candidate function}} 1151bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian}; 1251bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian 1351bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanianclass B : public BASE , public BASE1 1451bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian{ 1551bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian public: 1651bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian B(); 1751bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian} b; 1851bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian 1951bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanianextern B f(); 2051bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian 2158f9e13e87e57236fee4b914eea9be6f92a1c345Chris Lattnerconst int& ri = (void)0; // expected-error {{reference to type 'const int' could not bind to an rvalue of type 'void'}} 22893f955321cdf49dd0ceaf4ff821632e9b265000Fariborz Jahanian 2351bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanianint main() { 240c42bb653dc40b1caae010618831e320af824b18Chris Lattner const A& rca = f(); // expected-error {{reference initialization of type 'const A &' with initializer of type 'B' is ambiguous}} 257c2342dd4c9947806842e5aca3d2bb2e542853c9John McCall A& ra = f(); // expected-error {{non-const lvalue reference to type 'A' cannot bind to a temporary of type 'B'}} 2651bebc83e74001ed0412d82aadae9eb247fee2d4Fariborz Jahanian} 272c79281ef66cb5001f0ebadf6b317250c21a1c01Douglas Gregor 28e180ed2f014d49587bc49f09313cabf38080d6faDouglas Gregorstruct PR6139 { A (&x)[1]; }; 296242a45ca50586ed3f363d4ac7422e07092e4d96Richard SmithPR6139 x = {{A()}}; // expected-error{{non-const lvalue reference to type 'A [1]' cannot bind to an initializer list temporary}} 306242a45ca50586ed3f363d4ac7422e07092e4d96Richard Smith 316242a45ca50586ed3f363d4ac7422e07092e4d96Richard Smithstruct PR6139b { A (&x)[1]; }; 326242a45ca50586ed3f363d4ac7422e07092e4d96Richard SmithPR6139b y = {A()}; // expected-error{{non-const lvalue reference to type 'A [1]' cannot bind to a temporary of type 'A'}} 333c3af140263c3761665aa2c0aac4266115f5caf1Richard Smith 343c3af140263c3761665aa2c0aac4266115f5caf1Richard Smithnamespace PR16502 { 353c3af140263c3761665aa2c0aac4266115f5caf1Richard Smith struct A { int &&temporary; int x, y; }; 363c3af140263c3761665aa2c0aac4266115f5caf1Richard Smith int f(); 373c3af140263c3761665aa2c0aac4266115f5caf1Richard Smith const A &c = { 10, ++c.temporary }; 383c3af140263c3761665aa2c0aac4266115f5caf1Richard Smith} 39