#include #include class MyClass; enum class MyEnum : short { VAL1, VAL2 }; struct OuterStruct { union NamedUnion { struct InnerStruct { double d; char c; } inner; int i; } unionInstance; }; template struct TemplateStruct { T member[N]; }; template<> struct TemplateStruct { int specialMember[10]; }; template struct AnotherTemplate { T value; }; typedef decltype(nullptr) ( MyClass:: * InsaneComplexTypeDef ) ( decltype( (MyEnum::VAL1 == MyEnum::VAL2) ? 1 : 2.0 ) ( TemplateStruct< decltype(OuterStruct().unionInstance.inner), 5> :: * ptr ) [5] [ alignof(double) ], std::function< void * ( TemplateStruct &&, void ( MyClass:: * memFnPtr )( TemplateStruct< decltype(OuterStruct().unionInstance.inner) > ) ) >, int ( MyClass :: * & refToMemFnPtr )( TemplateStruct ) , int ( TemplateStruct:: * memberPointer) [10], typename std::tuple_element< 0, std::tuple< AnotherTemplate< TemplateStruct< decltype(OuterStruct().unionInstance), 3 > > > > :: type :: * complexMember, template typename AnotherTemplate :: * templateMember char&&..., ) volatile const && noexcept;