Меня интересовало преимущество std::enable_if
над static_asserts
, чтобы предотвратить создание экземпляра шаблона. Этот ответ предполагает, что std::enable_if
позволяет SFINAE, что является убедительным аргументом в случае шаблоны функций.
Однако допустим ли этот аргумент для шаблонов классов (и шаблоны переменных)? Насколько я знаю, там не задействовано разрешение перегрузки, что делает SFINAE - опять же, насколько я знаю - неактуальным, но я могу ошибаться. Если да, то можете ли вы назвать пример?
Если нет, я предполагаю, что static_assert
будет лучшим решением для данной проблемы (предотвращение создания экземпляра шаблона) в случае шаблонов классов, так как это, возможно, более явное, краткое и читаемое и позволяет создавать собственное сообщение об ошибке. Это правильно или я упускаю что-то кроме SFINAE?
static_assert
не предотвращает создание экземпляра, если условие не выполняется. Вместо этого это делает программу плохо сформированной. - person n. 1.8e9-where's-my-share m.   schedule 31.08.2020