我无法按类型访问使用forward_as_tuple创建的元组中的元素

时间:2018-09-07 08:12:14

标签: c++ c++17 perfect-forwarding stdtuple

我将C ++ 17与Visual C ++ 2017一起使用,并使用std::tuple创建引用的std::forward_as_tuple

从C ++ 14开始,可以通过使用类类型而不是索引来访问元组的元素。

当我尝试下面的代码时,我有编译错误

 error C2338: duplicate type T in get<T>(tuple)

您知道如何访问以这种方式创建的元组中的元素吗?

在示例代码下方

struct CA { 
    int data_ = 0; 
};

struct CB { 
    int data_ = 0; 
};

int main()
{
    CA a;
    CA b;

    auto joined_objects = std::forward_as_tuple(a, b);  

    std::cout << std::get<0>(joined_objects).data_ << std::endl; // works
    std::cout << std::get<CA &>(joined_objects).data_ << std::endl; // fails
 }

1 个答案:

答案 0 :(得分:5)

这是因为编译器不知道您真正想要哪个元素。

存在歧义,因为ab具有相同的类型。如果元组两次包含相同类型,则get类型的辅助程序将无法使用。这是可以理解的。

您可能是想写CB b吗? This works.