为什么要区分通用算法的谓词和非谓词版本?

Lin*_*gxi 5 c++ generic-programming c++-standard-library language-lawyer c++14

标准库确实区分了通用算法的谓词和非谓词版本.例如,std::sort()看起来像:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
Run Code Online (Sandbox Code Playgroud)

写下面的内容有什么问题吗?

template< class RandomIt, class Compare = std::less<void>>
void sort( RandomIt first, RandomIt last, Compare comp = Compare{});
Run Code Online (Sandbox Code Playgroud)

T.C*_*.C. 8

几乎是历史原因.

C++ 98/03没有函数模板的默认模板参数,因此它必须使用两个重载.之后更改它可能会破坏用户代码.

那么,假设我们只是重新设计整个事物,第二种形式是否应该首选?

这就是目前Ranges TS的工作草案所做的.