Solution for my SFINAE class:
#include <type_traits> template< typename ...types > struct identity { }; template< typename ...types > struct void_t { using type = void; }; template< typename type, typename identity, typename = void > struct is_embraceable : std::false_type { }; template< typename type, typename ...arguments > struct is_embraceable< type, identity< arguments... >, void_t< decltype(type{std::declval< arguments >()...}) > > : std::true_type { }; template< typename type, typename ...arguments > constexpr bool is_embraceable_v = is_embraceable< type, identity< arguments... > >::value;
source share