2 // { dg-options "-std=c++0x" }
3 template<typename T, typename U>
6 static const bool value = false;
12 static const bool value = true;
15 int&& f(const int&) {}
16 int&& (*fp)(const int&) = f;
17 int&& (&fr)(const int&) = f;
19 struct X { int&& f(const int&); };
21 int&& (X::*mfp)(const int&) = &X::f;
26 static_assert(is_same<decltype(f(i)), int&&>::value, "direct call");
27 static_assert(is_same<decltype(fp(i)), int&&>::value, "pointer");
28 static_assert(is_same<decltype((*fp)(i)), int&&>::value,
29 "dereferenced pointer");
30 static_assert(is_same<decltype(fr(i)), int&&>::value,
32 static_assert(is_same<decltype(xr.f(i)), int&&>::value,
33 "member function call");
34 static_assert(is_same<decltype((xr.*mfp)(i)), int&&>::value,
35 "member function pointer with .*");
36 static_assert(is_same<decltype((xp->*mfp)(i)), int&&>::value,
37 "member function pointer with ->*");