Considérez le code suivant:
template <typename T> int foo();
template <typename T> int foo() = delete;
est-ce valide C++ 11?
... tout voir sur GodBolt .
alors quels compilateurs ont raison et quels compilateurs sont s @ # $% e? :-)
GCC et MSVC ont un bug.
[dcl.fct.def.delete]
4 ... Une définition supprimée d'une fonction doit être la première déclaration de la fonction ou, pour une spécialisation explicite d'un modèle de fonction, la première déclaration de cette spécialisation ...
Ce qui, je crois, représente également des déclarations et des définitions instanciées. Étant donné que la référence à une fonction supprimée est une erreur matérielle, elle doit être déclarée supprimée dès que possible.