私が宣言したと仮定します:
template <typename T> void foo(T& t);
さて、の違いは何ですか
template <> void foo<int>(int& t);
そして
template void foo<int>(int& t);
意味的に?また、ブラケットなしのテンプレートと空ブラケット付きのテンプレートには、他のコンテキストで他のセマンティクスがありますか?
template <> void foo<int>(int& t);
は、テンプレートの特殊化を宣言しますが、本文は異なる可能性があります。
template void foo<int>(int& t);
は、テンプレートの明示的なインスタンス化を引き起こしますが、特殊化を導入しません。特定のタイプのテンプレートのインスタンス化を強制します。
クラス/構造で、
template <typename T> struct foo {};
専門分野は次のとおりです。
template <> struct foo<int>{};
以下は明示的なインスタンス化です。
template struct foo<int>;