1 // RUN: clang-cc -fsyntax-only -verify %s
30 // C++ [dcl.init.ref]p5b1
36 double& rd
= d
; // rd refers to d
37 const double& rcd
= d
; // rcd refers to d
39 A
& ra
= b
; // ra refers to A subobject in b
40 const A
& rca
= b
; // rca refers to A subobject in b
45 // C++ [dcl.init.ref]p5b2
47 double& rd2
= 2.0; // expected-error{{non-const lvalue reference to type 'double' cannot be initialized with a temporary of type 'double'}}
49 double& rd3
= i
; // expected-error{{non-const lvalue reference to type 'double' cannot be initialized with a value of type 'int'}}
55 const double& rcd2
= 2; // rcd2 refers to temporary with value 2.0
56 const volatile int cvi
= 1;
57 const int& r
= cvi
; // expected-error{{initialization of reference to type 'int const' with a value of type 'int const volatile' drops qualifiers}}
60 // C++ [dcl.init.ref]p3
62 int& yo
; // expected-error{{declaration of reference variable 'yo' requires an initializer}}
66 int& not_initialized_error
; // expected-error{{declaration of reference variable 'not_initialized_error' requires an initializer}}
67 extern int& not_initialized_okay
;
76 A
& a1
= c
; // expected-error {{ambiguous conversion from derived class 'struct C' to base class 'struct A':}}
79 // C++ [dcl.ref]p1, C++ [dcl.ref]p4
80 void test8(int& const,// expected-error{{'const' qualifier may not be applied to a reference}}
82 void&, // expected-error{{cannot form a reference to 'void'}}
83 int& &) // expected-error{{type name declared as a reference to a reference}}
86 typedef intref
& intrefref
; // C++ DR 106: reference collapsing
88 typedef intref
const intref_c
; // okay. FIXME: how do we verify that this is the same type as intref?