blob: ae2644919a7133e4ebe11cb64eec39e7ccd9e9a8 [file] [log] [blame]
Sebastian Redl7c80bd62009-03-16 23:22:08 +00001// RUN: clang -fsyntax-only -verify -std=c++0x %s
2
3typedef int&& irr;
4typedef irr& ilr_c1; // Collapses to int&
5typedef int& ilr;
6typedef ilr&& ilr_c2; // Collapses to int&
7
8irr ret_irr() {
9 return 0;
10}
11
12struct not_int {};
13
14int over(int&);
15not_int over(int&&);
16
17void f() {
18 int &&virr1; // expected-error {{declaration of reference variable 'virr1' requires an initializer}}
19 int &&virr2 = 0;
20 // FIXME: named rvalue references are lvalues!
21 //int &&virr3 = virr1; // xpected-error {{rvalue reference cannot bind to lvalue}}
22 int i1 = 0;
23 int &&virr4 = i1; // expected-error {{rvalue reference cannot bind to lvalue}}
24 int &&virr5 = ret_irr();
25
26 int i2 = over(i1);
27 not_int ni1 = over(0);
28 int i3 = over(virr2);
29 not_int ni2 = over(ret_irr());
30
31 ilr_c1 vilr1 = i1;
32 ilr_c2 vilr2 = i1;
33}