rni*_*ckb 8 c++ c++-concepts c++17
例如,我可以定义一个概念
template <class Iter>
concept bool Iterator =
requires(Iter i, typename std::iterator_traits<Iter>::value_type val,
typename std::iterator_traits<Iter>::reference ref) {
++i;
// other implementation
};
Run Code Online (Sandbox Code Playgroud)
与海湾合作委员会6这段代码编译,而是要像Iterator<int>也将导致对true即使val和ref会替换故障.这是它的假设吗?
使用最新的公共可用草案N4377,这是一个参数化约束([temp.constr.param]):
甲参数约束是声明的参数的序列(8.3.5),被称为约束限制变量,并且具有单一的操作数.[ 注意:参数化约束由requires-expression s(5.1.4)引入 .参数化约束的约束变量对应于requires-expression的requirement-parameter-list中声明 的参数,约束的操作数是约束的结合.- 结束说明 ]
该部分明确考虑了约束变量的替换失败([temp.constr.param]/2):
如果且仅对其约束变量的类型进行替换不会导致无效类型,并且满足其操作数,则满足参数化约束.模板参数按声明它们的顺序替换为声明的约束变量.如果替换为约束变量失败,则不再执行替换,并且不满足约束.
您观察到的行为似乎是实施中的错误.
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |