1// I, Howard Hinnant, hereby place this code in the public domain.
2
3// Test cast from lvalue to rvalue
4
5// { dg-do compile }
6// { dg-options "-std=c++0x" }
7
8template <bool> struct sa;
9template <> struct sa<true> {};
10
11struct one   {long x[1];};
12struct two   {long x[2];};
13
14struct A {};
15
16one foo(const A&) {return one();}
17two foo(A&&)      {return two();}
18
19int test1()
20{
21    A a;
22    sa<sizeof(foo(a)) == 1 * sizeof(long)> t1;
23    sa<sizeof(foo(static_cast<A&&>(a))) == 2 * sizeof(long)> t2;
24    return 0;
25}
26
27int main()
28{
29    return test1();
30}
31