【发布时间】:2019-09-02 04:36:08
【问题描述】:
看这个简单的概念示例:
template <typename T>
requires requires(T t) { { t+t } -> bool; }
void fn() {
}
int main() {
fn<bool>();
}
在这里,我使用bool 作为return-type-requirement 的type-constraint。当前草稿says:
类型约束:
嵌套名称说明符选择概念名称
nested-name-specifier opt concept-name
所以type-constraint 必须是concept-name。 bool(或任何类型)是否允许作为概念名称?如果是,它是什么意思,标准草案在哪里允许它?我认为bool 不是一个概念,所以这是不允许的。然而,gcc 和 clang 都编译了我的示例:godbolt
(当然,允许类型是有道理的,我只是不明白标准在哪里允许这样做,以及它的确切含义:类型应该完全匹配吗?还是可以发生转换?)
【问题讨论】:
标签: c++ language-lawyer c++20