Можете ли вы `= удалить` шаблонную функцию во втором объявлении? - PullRequest
18 голосов
/ 01 июня 2019

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

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

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

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

... посмотреть все на GodBolt .

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

1 Ответ

22 голосов
/ 01 июня 2019

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

[dcl.fct.def.delete]

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...