在函数中推导出参数之前的默认模板参数?

Vin*_*ent 5 c++ templates c++11

以下编译在g ++中没有问题:

template<typename ReturnType = double, typename OtherType> ReturnType func(const OtherType& var)
{
    ReturnType result = 0;
    /* SOMETHING */
    return result;
}
Run Code Online (Sandbox Code Playgroud)

在默认模板参数(OtherType此处)之后,所有符合标准的编译器是否可以使用非默认模板参数(ReturnType此处)?

Lil*_*ard 9

情况很复杂.从C++ 11规范:

如果类模板的模板参数具有默认模板参数,则每个后续模板参数应具有提供的默认模板参数或者是模板参数包.如果主类模板的模板参数是模板参数包,则它应该是最后一个模板参数.[注意:这些不是函数模板或类模板部分特化的要求,因为可以推导出模板参数(14.8.2).

所以你要做的是不允许上课,除非它是部分专业化.但是对于功能来说还可以.

因此,只要您只使用您在示例中显示的函数执行此操作,就可以了.你不能将它概括为类模板.