【发布时间】:2016-02-14 22:10:09
【问题描述】:
C++11 introduced 函数模板的默认模板参数。另见Default template arguments for function templates。
但是阅读 C++ 标准,我发现定义一个函数模板是合法的,它使用默认模板参数作为第一个模板参数,而不是其他模板参数。
这与default arguments 的处理方式相反,所有后续参数都必须提供默认参数;或者是一个函数参数包。
默认参数和默认模板参数之间的区别乍一看似乎很奇怪,但允许构造为:
template <typename TException = std::exception, typename TObjectBuilder>
auto SwallowExceptions(const TObjectBuilder& rObjectBuilder) -> decltype(rObjectBuilder())
{
try
{
return rObjectBuilder();
}
catch (const TException&)
{
return decltype(rObjectBuilder())();
}
}
这是合法的 C++ 代码吗?在标准中的什么地方可以找到?
【问题讨论】:
标签: c++ templates c++11 language-lawyer