2 // { dg-do compile { target c++14 } }
4 struct false_type { static constexpr bool value = false; };
5 struct true_type { static constexpr bool value = true; };
6 template<class T, class U>
7 struct is_same : false_type {};
9 struct is_same<T, T> : true_type {};
26 decltype(auto) r1 = s->i;
27 static_assert (is_same<decltype(r1), int>::value, "");
28 decltype(auto) r2 = s->r;
29 static_assert (is_same<decltype(r2), int&>::value, "");
30 decltype(auto) r3 = i;
31 static_assert (is_same<decltype(r3), int>::value, "");
32 decltype(auto) r4 = ir;
33 static_assert (is_same<decltype(r4), int&>::value, "");
43 decltype(auto) r1 = fn ();
44 static_assert (is_same<decltype(r1), int>::value, "");
45 decltype(auto) r2 = (fn ());
46 static_assert (is_same<decltype(r2), int>::value, "");
47 decltype(auto) r3 = ref ();
48 static_assert (is_same<decltype(r3), int&>::value, "");
49 decltype(auto) r4 = (ref ());
50 static_assert (is_same<decltype(r4), int&>::value, "");
51 decltype(auto) r5 = rref ();
52 static_assert (is_same<decltype(r5), int&&>::value, "");
53 decltype(auto) r6 = (rref ());
54 static_assert (is_same<decltype(r6), int&&>::value, "");
55 decltype(auto) r8 = (s->i);
56 static_assert (is_same<decltype(r8), const int&>::value, "");
57 decltype(auto) r9 = (s->r);
58 static_assert (is_same<decltype(r9), int&>::value, "");
59 decltype(auto) r10 = (i);
60 static_assert (is_same<decltype(r10), int&>::value, "");
61 decltype(auto) r11 = (ir);
62 static_assert (is_same<decltype(r11), int&>::value, "");
63 decltype(auto) r12 = (irr);
64 static_assert (is_same<decltype(r12), int&>::value, "");