可变参数模板类中的通用引用被视为右值引用

问题描述 投票:0回答:1

我正在尝试创建可变参数模板,它可以获取左值、右值和右值引用作为参数。但似乎

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;
}

https://coliru.stacked-crooked.com/a/7996ea4ab81e9b5d

c++ variadic-templates
1个回答
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
};
© www.soinside.com 2019 - 2024. All rights reserved.