Выбор ответа Middle Шаблоны и концепты обновлено

Что такое SFINAE

Вопрос

Что означает SFINAE?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Неудачная подстановка в сигнатуру исключает кандидата, это не ошибка. Substitution Failure Is Not An Error касается только «непосредственного контекста» подстановки: типы параметров, возвращаемого значения, аргументы шаблона по умолчанию.

Варианты ответа

  1. Любая ошибка в теле шаблона игнорируется, а функция становится пустой
  2. Неудачная подстановка в сигнатуру исключает кандидата, это не ошибкаправильный ответ
  3. Шаблоны с ошибками компилируются, но падают в рантайме при вызове
  4. Правило, по которому нешаблонная функция выбирается перед шаблонной

Разбор

Substitution Failure Is Not An Error касается только «непосредственного контекста» подстановки: типы параметров, возвращаемого значения, аргументы шаблона по умолчанию. На этом работает std::enable_if.

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

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.