// PR c++/61647 class XX; template struct Accessor; template class Variant { protected: KeyStore index; Container state; public: Variant(Container st, const Key& i) : index(i), state(st) {} template operator T() const { return Accessor::template get(state, index); } }; class AutoCleanVariant : public Variant { public: AutoCleanVariant(XX* st, int i) : Variant(st,i) {} template operator T() const { return Variant::operator T(); } };