http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59437
--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Slightly reduced: template < typename T > struct A { T foo (); }; template < typename T > struct C: virtual public A < T > { C & operator<< (C & (C &)); }; template < typename T > C < T > &endl (C < int > &c) { c.foo (); return c; } C < int > cout; void fn () { cout << endl; }