/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: auTemplateMetaIsFunction.hpp Date: 2022-3-28 Author: Reece Copy/pasted: https://en.cppreference.com/w/cpp/types/AuIsFunction ***/ #pragma once #if defined(AURORA_COMPILER_CLANG) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wambiguous-ellipsis" #endif // primary template struct AuIsFunction : AuFalseType { }; // specialization for regular functions template struct AuIsFunction : AuTrueType {}; // specialization for variadic functions such as std::printf template struct AuIsFunction : AuTrueType {}; // specialization for function types that have cv-qualifiers template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; // specialization for function types that have ref-qualifiers template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; // specializations for noexcept versions of all the above (C++17 and later) template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template struct AuIsFunction : AuTrueType {}; template inline constexpr bool AuIsFunction_v = AuIsFunction::value; #if defined(AURORA_COMPILER_CLANG) #pragma clang diagnostic pop #endif