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;
 | 
						|
}
 |