// typedef
typedef unsigned long ULongArrayTypedef[10];
ULongArrayTypedef ULongArrayVar;

typedef long double*& RefTypedef;
long double* LongDoublePtrVar = 0;
RefTypedef RefVar = LongDoublePtrVar;

typedef long long (*FuncPtrTypedef)(int&, unsigned char**, short[], const double, volatile bool);
FuncPtrTypedef FuncVar;

typedef char (*VarArgsFuncTypedef)(void*, long, unsigned short, unsigned int, ...);
VarArgsFuncTypedef VarArgsFuncVar;

typedef float (*VarArgsFuncTypedefA)(...);
VarArgsFuncTypedefA VarArgsFuncVarA;

// unscoped enum
enum Enum { RED, GREEN, BLUE };
Enum EnumVar;

enum EnumConst { LOW, NORMAL = 10, HIGH };
EnumConst EnumConstVar;

enum EnumEmpty {};
EnumEmpty EnumEmptyVar;

enum EnumUChar : unsigned char { ON, OFF, AUTO };
EnumUChar EnumCharVar;

// scoped enum
enum class EnumClass { YES, NO, DEFAULT };
EnumClass EnumClassVar;

enum struct EnumStruct { red, blue, black };
EnumStruct EnumStructVar;

typedef char16_t WChar16Typedef;
WChar16Typedef WC16Var;

typedef char32_t WChar32Typedef;
WChar32Typedef WC32Var;

typedef wchar_t WCharTypedef;
WCharTypedef WCVar;

int main() {
  return 0;
}
