// { dg-do run } // PRMS Id: g++/6034 extern "C" int printf (const char *, ...); class Base { char x; }; template // remove the public Base inheritance and the problem goes away... class Container : public Base { public: Container(const T& aValue): myValue(aValue) { } operator const T&(void) const { printf("Container::const T& called\n"); return myValue; } protected: T myValue; }; typedef unsigned short Type; typedef Container TypeContainer; int main(void) { TypeContainer myTypeContainer(2); Type t = myTypeContainer; printf ("myType = %d\n", t); return t != 2; }