// PR c++/51547 // { dg-do compile { target c++11 } } template struct vector { T* begin() { return &member; } const T* begin() const { return &member; } T member; }; struct Bar { int x; }; struct Foo { const vector& bar() const { return bar_; } vector bar_; }; template struct Y { void foo() { Foo a; auto b = a.bar().begin(); auto&& c = b->x; } }; template void foo() { Foo a; auto b = a.bar().begin(); auto&& c = b->x; } int main() { Y p; p.foo(); foo(); }