使用std :: tuple_size时导致`error:incomplete type`

时间:2017-08-30 11:59:42

标签: c++ c++14

我在命名空间中有一个类模板
我在该命名空间中有一个非成员函数,它返回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

1 个答案:

答案 0 :(得分:3)

您需要衰减类型以删除参考:

size_t s = std::tuple_size<std::decay_t<tup>>::value;