我在命名空间中有一个类模板
我在该命名空间中有一个非成员函数,它返回std::tuple
std::shared_ptr(s)<myown::myclass<Type>>
的{{1}}
我调用了函数F()
并将其结果(std::tuple
)传递给另一个非成员函数(在myown
名称空间内)
namespace myown {
template<typename T> class myclass{ /*...*/};
template<> class myclass<void>{ /*...*/};
auto F()
{
return std::make_tuple(std::shared_ptr<myclass<int>>(),
std::shared_ptr<myclass<const char *>>(),
std::shared_ptr<myclass<int>>());
}
template <typename tup>
auto anotherF(tup&& result){
size_t s = std::tuple_size<tup>::value;//
/*...*/
}
}
int main()
{
auto tr = myown::F();
myown::anotherF(tr);
}
使用std::tuple_size<tup>
会产生error: incomplete type...used in nested name specifier
答案 0 :(得分:3)
您需要衰减类型以删除参考:
size_t s = std::tuple_size<std::decay_t<tup>>::value;