次のコードは、テンプレートを宣言し、明示的なインスタンス化定義を宣言してから、明示的なインスタンス化宣言を宣言します。
template <typename T>
T Double(T number)
{
return number * 2;
}
extern template int Double<int>(int); // declaration
template int Double<int>(int t); // definition
int main(int argc, char* argv[])
{
int n = Double(10);
return 0;
}
エラーが発生します:
error C2929: 'int Double<int>(int)' : explicit instantiation; cannot explicitly force and suppress instantiation of template-class member
Visual Studio 2012 で。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htmから、定義は宣言に従うため、これは有効であるという印象を受けています。
何か不足していますか?