// clang-format off
namespace N0 {
namespace N1 {

namespace {
enum Enum { Enum_0 = 1, Enum_1 = 2, Enum_2 = 4, Enum_3 = 8 };
enum class ScopedEnum { Enum_0 = 1, Enum_1 = 2, Enum_2 = 4, Enum_3 = 8 };
}

Enum Global = Enum_3;

struct Base {
  Enum m_e = Enum_1;
};

class Class : public Base {
public:
  Class(Enum e) : m_ce(e) {}

  static int StaticFunc(const Class &c) {
    return c.PrivateFunc(c.m_inner) + Global + ClassStatic;
  }

  const Enum m_ce;

  static int ClassStatic;
  static const int ClassStaticConst = 8;
  static constexpr int ClassStaticConstexpr = 9;
  static constexpr float ClassStaticConstexprFloat = 10.f;
  static constexpr double ClassStaticConstexprDouble = 11.0;
  static constexpr long double ClassStaticConstexprLongDouble = 12.0;
  static const Enum ClassStaticConstEnum = Enum_3;
  static const ScopedEnum ClassStaticConstScopedEnum = ScopedEnum::Enum_2;

private:
  struct Inner {
    char x;
    short y;
    int z;
  };

  int PrivateFunc(const Inner &i) const { return i.z; }

  Inner m_inner{};
};
int Class::ClassStatic = 7;

template<typename T>
struct Template {
  template<Enum E>
  void TemplateFunc() {
    T::StaticFunc(T(E));
  }
};

void foo() { Template<Class>().TemplateFunc<Enum_0>(); }

} // namespace N1
} // namespace N0

int main() {
  N0::N1::foo();
  return 0;
}
