template struct X { public: operator T*() { return (T*)1; }; }; template struct S; template struct S { public: operator Q*() { return (Q*)2; } }; void f(void) { struct X x; (int *)x; struct S s; (int *)s; }