使用 std::tuple_size 时导致“错误:不完整类型”

RaG*_*__M 4 c++ c++14

我在命名空间中有一个类模板
并且我在该命名空间内有一个非成员函数,它返回std::tuplestd::shared_ptr(s)<myown::myclass<Type>>
调用该函数F()并将其 result( 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);
 }
Run Code Online (Sandbox Code Playgroud)

std::tuple_size<tup>结果的使用error: incomplete type...used in nested name specifier

Jar*_*d42 6

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

size_t s = std::tuple_size<std::decay_t<tup>>::value;
Run Code Online (Sandbox Code Playgroud)