次のコードを検討してください。
template <typename T> int foo();
template <typename T> int foo() = delete;
これは有効なC++ 11ですか?
...すべてを GodBolt で確認してください。
それで、どのコンパイラが適切で、どのコンパイラがs @#$%eですか? :-)
GCCとMSVCにはバグがあります。
[dcl.fct.def.delete]
4 ...関数の削除された定義は、関数の最初の宣言、または関数テンプレートの明示的な特殊化の場合、その特殊化の最初の宣言です...
これは、インスタンス化された宣言と定義も表していると思います。削除された関数を参照することはハードエラーであるため、削除済みとしてできるだけ早く宣言する必要があります。