// { dg-do compile { target c++1y } } // { dg-options "-Wno-return-local-addr" } template struct same_type; template struct same_type {}; int& f(); int i; decltype(auto) g() { return f(); } decltype(auto) h1() { return i; } decltype(auto) h2() { return (i); } decltype(auto) h2a() { return 0,i; } struct A { int i; }; A a; decltype(auto) h3() { return a.i; } decltype(auto) h4() { return (a.i); } template decltype(auto) h5(T t) { return t.i; } template decltype(auto) h6(T t) { return (t.i); } int main() { decltype(auto) i = f(); same_type(); decltype(auto) i2 = i; same_type(); decltype(auto) i3 = ::i; same_type(); decltype(auto) i4 = (::i); same_type(); decltype(auto) i5 = a.i; same_type(); decltype(auto) i6 = (a.i); same_type(); decltype(auto) i7 = true ? ::i : ::i; same_type(); same_type(); same_type(); same_type(); same_type(); same_type(); same_type(); same_type(); same_type(); }