blob: 8c9e26744d5f3ba924bf6c69bd41cdacf00f8d00 [file] [log] [blame]
Aleksandr Urakov709426b2018-09-10 08:08:43 +00001namespace N0 {
2namespace N1 {
3
4namespace {
5enum Enum { Enum_0 = 1, Enum_1 = 2, Enum_2 = 4, Enum_3 = 8 };
6}
7
8Enum Global = Enum_3;
9
10struct Base {
11 Enum m_e = Enum_1;
12};
13
14class Class : public Base {
15public:
16 Class(Enum e) : m_ce(e) {}
17
18 static int StaticFunc(const Class &c) {
19 return c.PrivateFunc(c.m_inner) + Global + ClassStatic;
20 }
21
22 const Enum m_ce;
23
24 static int ClassStatic;
25
26private:
27 struct Inner {
28 char x;
29 short y;
30 int z;
31 };
32
33 int PrivateFunc(const Inner &i) const { return i.z; }
34
35 Inner m_inner{};
36};
37int Class::ClassStatic = 7;
38
Aleksandr Urakovc1e530e2018-11-06 08:02:55 +000039template<typename T>
40struct Template {
41 template<Enum E>
42 void TemplateFunc() {
43 T::StaticFunc(T(E));
44 }
45};
46
47void foo() { Template<Class>().TemplateFunc<Enum_0>(); }
Aleksandr Urakov709426b2018-09-10 08:08:43 +000048
49} // namespace N1
50} // namespace N0
51
52int main() {
53 N0::N1::foo();
54 return 0;
55}