1
最近,我正在與學生討論限制類型的可能性使用轉發引用。我知道通過is_same
與static_assert
或enable_if
一起比較類型,但我們也談到了顯式模板實例化。明確的模板實例化和轉發引用
下面的例子對我的作品與GCC:
f.h:
template <typename T>
void f(T&& param); // declaration
f.cpp:
#include <iostream>
template <typename T>
void f(T&& param) { std::cout << param << std::endl; }
// explicit instantiations:
template void f<int>(int&&);
template void f<int&>(int&);
main.cpp中:
#include "f.h"
int main() {
f(1);
// f('1'); // LINKER ERROR
int i = 2;
f(i);
}
我不是顯式模板實例的專家,所以我只是想知道這樣的解決方案是否符合便攜/符合標準的。 (請不要問我關於使用的情況下,我沒有任何對我來說,這純粹是一個學術問題。)
UPDATE
我也有點困惑的格式的顯式實例化(<int>(int&&)
和<int&>(int&)
),但我想它是由模板演繹給出的,也許是引用崩潰規則。