annotate gcc/testsuite/g++.dg/template/conv14.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // PR c++/61647
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 class XX;
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 template<typename Container, typename Key>
kono
parents:
diff changeset
6 struct Accessor;
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 template<typename Container, typename Key, typename KeyStore = Key>
kono
parents:
diff changeset
9 class Variant {
kono
parents:
diff changeset
10 protected:
kono
parents:
diff changeset
11 KeyStore index;
kono
parents:
diff changeset
12 Container state;
kono
parents:
diff changeset
13 public:
kono
parents:
diff changeset
14 Variant(Container st, const Key& i) : index(i), state(st) {}
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 template<typename T>
kono
parents:
diff changeset
17 operator T() const {
kono
parents:
diff changeset
18 return Accessor<Container, KeyStore>::template get<T>(state, index);
kono
parents:
diff changeset
19 }
kono
parents:
diff changeset
20 };
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 class AutoCleanVariant : public Variant<XX*, int> {
kono
parents:
diff changeset
23 public:
kono
parents:
diff changeset
24 AutoCleanVariant(XX* st, int i) : Variant<XX*,int>(st,i) {}
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 template<typename T>
kono
parents:
diff changeset
27 operator T() const {
kono
parents:
diff changeset
28 return Variant<XX*, int>::operator T();
kono
parents:
diff changeset
29 }
kono
parents:
diff changeset
30 };