为什么Stroustrup的书会演示默认的函数模板参数,这在当时是不允许的?

Mar*_*tin 4 c++ function-templates

任何人都可以解释为什么在第三版C++编程语言的第13章中,Stroustrup说明了函数模板的默认参数,尽管C++(pre C++ 11)不支持它们?这是Stroustrup在第13.4.1节中给出的示例:

明确指定每个调用的比较是繁琐的.幸运的是,很容易选择默认值,因此只需要明确指定不常见的比较条件.这可以通过重载来实现:

template<class T, class C>
int compare(const String<T>& str1, const String<T>& str2); // compare using C
template<class T>
int compare(const String<T>& str1, const String<T>& str2); // compare using Cmp<T>
Run Code Online (Sandbox Code Playgroud)

或者,我们可以提供普通约定作为默认模板参数:

template <class T, class C = Cmp<T> >
int compare(const String<T>& str1, const String<T>& str2)
Run Code Online (Sandbox Code Playgroud)

这是编译器错误:

错误:默认模板参数可能不在函数模板中使用

Ala*_*kes 9

作者自己在他的网站上解释了这一点:

由于不幸的疏忽,标准只是禁止函数模板的模板参数的默认参数.投票在下一个标准中得到纠正.