#include <functional> #include <tuple> class MyClass; enum class MyEnum : short { VAL1, VAL2 }; struct OuterStruct { union NamedUnion { struct InnerStruct { double d; char c; } inner; int i; } unionInstance; }; template<typename T, int N = alignof(double)> struct TemplateStruct { T member[N]; }; template<> struct TemplateStruct<int, 10> { int specialMember[10]; }; template<typename T> 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<int, 10>&&, void (MyClass::*memFnPtr)(TemplateStruct<decltype(OuterStruct().unionInstance.inner)>))>, int (MyClass::*&refToMemFnPtr)(TemplateStruct<int, 10>), int (TemplateStruct<int, 10>::*memberPointer)[10], typename std::tuple_element<0, std::tuple<AnotherTemplate<TemplateStruct<decltype(OuterStruct().unionInstance), 3>>>>::type::*complexMember, template<typename U> typename AnotherTemplate<U>::*templateMember char&&..., ) volatile const && noexcept;