Можете ли вы "удалить" шаблонную функцию во втором объявлении? - программирование
Подтвердить что ты не робот

Можете ли вы "удалить" шаблонную функцию во втором объявлении?

Рассмотрим следующий код:

template <typename T> int foo();
template <typename T> int foo() = delete;

это действительный С++ 11?

  • GCC (9.1) говорит: да!
  • clang (8.0) говорит: нет!
  • nvcc (9.2) говорит: нет!
  • MSVC (19.20) говорит: да! (в режиме С++ 14 он не поддерживает С++ 11.)

... увидеть все это на GodBolt.

так какие компиляторы верны, а какие компиляторы s @# $% e? :-)

4b9b3361

Ответ 1

GCC и MSVC имеют ошибку.

[dcl.fct.def.delete]

4... Удаленное определение функции должно быть первым объявлением функции или, для явной специализации шаблона функции, первым объявлением этой специализации...

Который я верю, выступает за конкретизированные декларации и определения также. Поскольку ссылка на удаленную функцию является серьезной ошибкой, она должна быть объявлена как удаленная как можно скорее.