C++20新增了概念,并且标准库中包含了相当多的概念。其中一个概念引起了我的注意:std::invocable,它验证了一个函数对象是否能够使用一组参数进行调用。
标准为什么没有定义这些概念?是因为疏忽了还是有什么细微之处被一般读者忽略了,导致委员会决定不包含这些概念呢?
std::invocable
只是std::is_invocable
的语法糖。然而,标准库进一步定义了std::is_invocable_r
,它测试一个函数对象是否能够使用一组参数进行调用,并且在调用后返回特定的类型。这两个工具还有nothrow
版本。然而,在标准中并没有定义相应的概念。标准为什么没有定义这些概念?是因为疏忽了还是有什么细微之处被一般读者忽略了,导致委员会决定不包含这些概念呢?
std::is_invocable_r
并不测试一个函数对象是否返回特定类型R。它测试的是返回类型是否可以转换为R。我怀疑这里的理由与在概念的最终设计中有std::same_as
和std::convertible_to
的原因相同。也就是说,两者都是有效的,所以标准不会随意选择一个,让我们在需要时自行选择。 - undefined