// PR c++/53223 // { dg-do compile { target c++11 } } #include <type_traits> #define SA(x) static_assert ((x), #x) struct A { int good() const; int operator *() const; int operator ++() const; int operator [](int) const; }; int operator-- (const A&); template<typename T> void func(T t) { A x; auto &&g1 = x.good(); auto &&g2 = x.operator*(); auto &&error1 = *x; auto &&error2 = ++x; auto &&error3 = --x; auto &&error4 = x[5]; SA ((std::is_same<int &&, decltype (error1)>::value)); SA ((std::is_same<int &&, decltype (error2)>::value)); SA ((std::is_same<int &&, decltype (error3)>::value)); SA ((std::is_same<int &&, decltype (error4)>::value)); } void func2(int) { A x; auto &&g = *x; } int main() { func(0); func2(0); }