我正在尝试创建可变参数模板,它可以获取左值、右值和右值引用作为参数。但似乎
T&&
被视为右值引用,并且不接受其他类型。
我错过了什么吗?我认为
&&
在模板中使用时是通用参考。
#include <string>
template <typename... T>
struct MyClass
{
MyClass(T&&... values)
{
}
};
int main()
{
std::string string_value;
//MyClass my_class(string_value); // class template argument deduction failed
//MyClass<std::string> my_class(string_value); // cannot bind rvalue reference of type
MyClass<std::string> my_class(std::move(string_value)); // OK
return 0;
}
这不是通用参考。
template<class T>
struct A
{
template<class U>
A(T&&, U&&, int*); // #1: T&& is not a forwarding reference
// U&& is a forwarding reference
A(T&&, int*); // #2: T&& is not a forwarding reference
};