Я использую decltype( ptr+ T{}){};, чтобы проверить, является ли это целочисленным типом. При использовании SFINAE он сообщает «ложь», а при использовании понятий — «истина».
Полный пример кода:
Код: Выделить всё
#include
// SFINAE
template < typename T >
struct my_is_integral
{
template < typename C >
static constexpr std::true_type check( C, decltype( std::declval()+ C{})=nullptr)
{
return {};
}
template < typename >
static constexpr std::false_type check( ... ) { return {}; }
using type = decltype( check( 0 ));
static constexpr bool value = type::value;
};
template < typename T>
auto sfinaeIntegral(T) -> std::enable_if_t< my_is_integral::value, void >
{
std::cout std::enable_if_t< !my_is_integral::value, void >
{
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79848496/sfinae-vs-concepts-deliver-different-results-for-enum-type[/url]
Мобильная версия