64 lines
1.3 KiB
C++
64 lines
1.3 KiB
C++
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;
|
|
}
|