Search code examples
c++variadic-templatesparameter-pack

error C3856: 'RecursiveType': symbol is not a class template


I am trying to create type with recursive template like std::tuple, unfortunately it does not compile, however I did it seemingly same way as in tuple source code. I am compiling with Visual Studio 2022 with -std:c++latest and getting error error C3856: 'RecursiveType': symbol is not a class template.

Here is minimal example:

struct Param {
};

template <>
struct RecursiveType<> { // empty base case

};

template <Param T, Param... Rest>
struct RecursiveType<T, Rest...> : public RecursiveType<Rest...> { // recursive type definition

};

Solution

  • You are missing a primary template. Both of your definitions are specializations.

    template <Param... Params>
    struct RecursiveType;
    

    See it on godbolt