#include <type_traits>
template<typename T>
void f(T&& a, T&& b)
{}
int main()
{
int n;
f(n, std::move(n));
}
T&&
是转发引用类型,所以我认为decltype(a)
应该是int&
而且decltype(b)
应该是int&&
。
但是,上面的代码会产生以下错误:
main.cpp(13,2): 错误:没有匹配的函数来调用 'f' f(n, std::move(n));
main.cpp(7,6):注意:候选模板被忽略:推断参数“T”的冲突类型(“int &”与“int”)
无效 f(T&& a, T&& b)
产生 1 个错误。
当左值引用参数和右值引用参数作为相同的转发引用类型传递时,为什么它不起作用?
我的编译器是clang 4.0。