1// PR c++/61647 2 3class XX; 4 5template<typename Container, typename Key> 6struct Accessor; 7 8template<typename Container, typename Key, typename KeyStore = Key> 9class Variant { 10protected: 11 KeyStore index; 12 Container state; 13public: 14 Variant(Container st, const Key& i) : index(i), state(st) {} 15 16 template<typename T> 17 operator T() const { 18 return Accessor<Container, KeyStore>::template get<T>(state, index); 19 } 20}; 21 22class AutoCleanVariant : public Variant<XX*, int> { 23public: 24 AutoCleanVariant(XX* st, int i) : Variant<XX*,int>(st,i) {} 25 26 template<typename T> 27 operator T() const { 28 return Variant<XX*, int>::operator T(); 29 } 30}; 31