Почему void_t используется в Sfinae?C++

Программы на C++. Форум разработчиков
Anonymous
Почему void_t используется в Sfinae?

Сообщение Anonymous »

Я намерен, чтобы мой вопрос был посвящен: как мы используем void_t для sfinae?. Я понимаю, как используется void_t. Я не понимаю, почему это нужно.template< class , class = void >
struct has_member : std::false_type
{ };

// specialized as has_member< T , void > or discarded (SFINAE)
template< class T >
struct has_member< T , decltype( T::member ) > : std::true_type
{ };
< /code>
Если я прохожу в объекте без «члена», он все равно будет по умолчанию к шаблону по умолчанию, в то время как объект с «членом» будет создавать экземпляр специализации. Я думаю, что это как -то связано со вторым параметром шаблона первичного шаблона, имеющего по умолчанию ('class = void'). Но я не понимаю, почему это важно. Почему специализация должна использовать «void_t», чтобы соответствовать этому параметру по умолчанию? Разве не вся смысл по умолчанию, что они могут быть переопределены? Где я могу прочитать больше о этой теме cppreference.com?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-sfinae

Вернуться в «C++»