brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · fb20c9d Raw
64 lines · cpp
1namespace N0 {2namespace N1 {3 4namespace {5enum Enum { Enum_0 = 1, Enum_1 = 2, Enum_2 = 4, Enum_3 = 8 };6enum class ScopedEnum { Enum_0 = 1, Enum_1 = 2, Enum_2 = 4, Enum_3 = 8 };7}8 9Enum Global = Enum_3;10 11struct Base {12  Enum m_e = Enum_1;13};14 15class Class : public Base {16public:17  Class(Enum e) : m_ce(e) {}18 19  static int StaticFunc(const Class &c) {20    return c.PrivateFunc(c.m_inner) + Global + ClassStatic;21  }22 23  const Enum m_ce;24 25  static int ClassStatic;26  static const int ClassStaticConst = 8;27  static constexpr int ClassStaticConstexpr = 9;28  static constexpr float ClassStaticConstexprFloat = 10.f;29  static constexpr double ClassStaticConstexprDouble = 11.0;30  static constexpr long double ClassStaticConstexprLongDouble = 12.0;31  static const Enum ClassStaticConstEnum = Enum_3;32  static const ScopedEnum ClassStaticConstScopedEnum = ScopedEnum::Enum_2;33 34private:35  struct Inner {36    char x;37    short y;38    int z;39  };40 41  int PrivateFunc(const Inner &i) const { return i.z; }42 43  Inner m_inner{};44};45int Class::ClassStatic = 7;46 47template<typename T>48struct Template {49  template<Enum E>50  void TemplateFunc() {51    T::StaticFunc(T(E));52  }53};54 55void foo() { Template<Class>().TemplateFunc<Enum_0>(); }56 57} // namespace N158} // namespace N059 60int main() {61  N0::N1::foo();62  return 0;63}64