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&)
),但我想它是由模板演绎给出的,也许是引用崩溃规则。