OSDN Git Service

PR debug/43942
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / cpp0x / named.C
1 // { dg-options "--std=c++0x" }
2 // { dg-do link }
3
4 template<typename _Tp>
5 inline _Tp&&
6 movel(_Tp& __t)
7 { return static_cast<_Tp&&>(__t); }
8
9 struct S {};
10 struct T
11 {
12   T(S && s_) : s(movel(s_)) {}
13   S && get() { return movel(s); }
14   operator S&&() { return movel(s); }
15   S && s;
16 };
17
18 void named(S const &) {}
19 void named(S&&);
20
21 void unnamed(S const &);
22 void unnamed(S&&) {}
23
24 void f(S && p)
25 {
26   S && s(movel(p));
27   T t(movel(s));
28
29   named(s);                          // variable reference
30   named(p);                          // parameter reference
31   named(t.s);                        // class member access
32
33   unnamed(t.get());                  // function return
34   unnamed(t);                        // implicit conversion
35   unnamed(static_cast<S&&>(s));      // cast to rvalue
36 }
37
38 int main()
39 {
40 }