我真的不明白为什么 C++20 会提供这样的功能。我需要有人指出如何优雅地使用此功能。这是一个例子:
template<typename T>
concept LessCompareable=requires(const T& lhs, const T& rhs)
{
{lhs<rhs}->bool;
};
现在我已经定义了一个概念。然后我将像这样约束一个函数模板:(好吧,我们将其命名为comp,实际上它就像std::min
)
template<typename T>
const T& comp(const T& a , const T& b) requires LessCompareable<T>
{return a<b?a:b;}
所以问题是如果你这样称呼
std::thread a,b;
cout<<comp(a,b);
发生编译错误
但是如果我们不使用约束,CE 也会发生。
所以这让我很困惑,他们都有CE,那我为什么要使用约束呢?
我想如果我想清理错误信息,我可以使用 SFINAE。