递归变量模板函数的编译错误

Max*_*xpm 8 c++ recursion codeblocks variadic c++11

我在Code :: Blocks中准备了一个简单的可变参数模板测试,但是我收到一个错误:

调用'OutputSizes()'没有匹配函数

这是我的源代码:

#include <iostream>
#include <typeinfo>

using namespace std;

template <typename FirstDatatype, typename... DatatypeList>
void OutputSizes()
{
    std::cout << typeid(FirstDatatype).name() << ": " << sizeof(FirstDatatype) << std::endl;
    OutputSizes<DatatypeList...>();
}

int main()
{
    OutputSizes<char, int, long int>();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用GNU GCC -std=C++0x.使用-std=gnu++0x没有区别.

How*_*ant 14

以下是您消除基本案例歧义的方法:

#include <iostream>
#include <typeinfo>

template <typename FirstDatatype>
void OutputSizes()
{
    std::cout << typeid(FirstDatatype).name() << ": " << sizeof(FirstDatatype) << std::endl;
}

template <typename FirstDatatype, typename SecondDatatype, typename... DatatypeList>
void OutputSizes()
{
    OutputSizes<FirstDatatype>()
    OutputSizes<SecondDatatype, DatatypeList...>();
}

int main()
{
    OutputSizes<char, int, long int>();
}
Run Code Online (Sandbox Code Playgroud)