C++ 使用std::tuple\u size时导致“错误:类型不完整”

C++ 使用std::tuple\u size时导致“错误:类型不完整”,c++,c++14,C++,C++14,我在命名空间中有一个类模板 我在名称空间中有一个非成员函数,它返回一个std::tuple的std::shared\u ptr 我调用了函数F(),并将其结果(std::tuple)传递给另一个非成员函数(在myown命名空间内) myown名称空间{ 模板类myclass{/*…*/}; 模板类myclass{/*…*/}; 自动F() { 返回std::make_tuple(std::shared_ptr(), std::shared_ptr(), std::shared_ptr()); }

我在命名空间中有一个类模板
我在名称空间中有一个非成员函数,它返回一个
std::tuple
std::shared\u ptr

我调用了函数
F()
,并将其结果(
std::tuple
)传递给另一个非成员函数(在
myown
命名空间内)

myown名称空间{
模板类myclass{/*…*/};
模板类myclass{/*…*/};
自动F()
{
返回std::make_tuple(std::shared_ptr(),
std::shared_ptr(),
std::shared_ptr());
}
模板
自动另一个(tup&&result){
size\u t s=std::tuple\u size::value//
/*...*/
}
}
int main()
{
auto tr=myown::F();
myown::另一个f(tr);
}

使用
std::tuple\u size
会导致
错误:类型不完整…在嵌套名称说明符中使用

您需要衰减类型以删除引用:

size_t s = std::tuple_size<std::decay_t<tup>>::value;
size\u t s=std::tuple\u size::value;

谢谢,我真的没有想过衰减元组类型,对我来说,这个错误有点误导性,可能是因为我从未处理过'em:)@Explorer\N:如果你仔细阅读错误(你在问题中跳过:/)“错误:未定义模板'std::tuple\u size'的隐式实例化”,你可以在结尾处看到有问题的引用。
size_t s = std::tuple_size<std::decay_t<tup>>::value;