// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4365 4987) #endif #include #include #include #ifdef _MSC_VER #pragma warning(pop) #endif template struct true_sink : std::true_type {}; template static auto try_instantiate(std::int32_t /*unused*/, Args&&... args)->true_sink < decltype(T{std::forward(args)...}) >; template static auto try_instantiate(std::uint32_t /*unused*/, Args&&... /*unused*/)->std::false_type; #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4100) #endif template constexpr bool can_instantiate(Args&&... args) { using Result = decltype(try_instantiate(0, std::forward(args)...)); return Result::value; } #ifdef _MSC_VER #pragma warning(pop) #endif