Информация об изменениях

Сообщение Re: несколько вопросов по С++ от 12.12.2019 13:52

Изменено 13.12.2019 9:01 rg45

Re: несколько вопросов по С++
Здравствуйте, sergey2b, Вы писали:

S>подскажите пожалуйста как запретить инстансирование template если тип из typename T не являеться безнаковым


Альтернативой static_assert-у является использование SFINAE:

#include <utility>

template <typename, typename = void>
class Foo;

template <typename T>
class Foo<T, std::enable_if_t<is_unsigned_v<T>>> {

};


Первым преимуществом этого подхода является то, что ошибка компиляции возникает в точке неправильного использования, а не в потрохах шаблонного класса.

Второе преимущество проявляется, когда мы имеем дело с шаблонными функциями — иногда нужно просто исключить какую-то шаблонную перегрузку или специализацию при поиске кандидатов на подстановку, а не получить ошибку компиляции.
Re: несколько вопросов по С++
Здравствуйте, sergey2b, Вы писали:

S>подскажите пожалуйста как запретить инстансирование template если тип из typename T не являеться безнаковым


Альтернативой static_assert-у является использование SFINAE:

#include <utility>

template <typename, typename = void>
class Foo;

template <typename T>
class Foo<T, std::enable_if_t<std::is_unsigned_v<T>>> {

};


Первым преимуществом этого подхода является то, что ошибка компиляции возникает в точке неправильного использования, а не в потрохах шаблонного класса.

Второе преимущество проявляется, когда мы имеем дело с шаблонными функциями — иногда нужно просто исключить какую-то шаблонную перегрузку или специализацию при поиске кандидатов на подстановку, а не получить ошибку компиляции.