6

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

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

所有符合标准的编译器都可以在默认模板参数(OtherType此处)之后具有非默认模板参数(ReturnType此处)吗?

4

1 回答 1

10

情况很复杂。来自 C++11 规范:

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

因此,除非是部分专业化,否则您尝试做的事情是不允许用于课程的。但是对于功能来说还可以。

因此,只要您只使用示例中显示的函数来执行此技巧,就可以了。您只是不能将其推广到类模板。

于 2012-08-20T23:28:17.873 回答