[英]Are concepts as type names in function declarations valid in C++20?
下面的代码在 gcc 和 clang(主干与 -std=c++20)上编译得很好,但在 msvc (19.27 /std:c++latest) 上编译错误。
template<typename T>
concept subable = requires(T lhs, T rhs) { lhs - rhs; };
auto sub(subable auto x, subable auto y) {
return x - y;
}
int main() {
const auto z = sub(4, 5);
}
afaik 上面的代码在 C++20 中应该是有效的,它在概念 ts 中。 这是微软落后于其他实现的一个案例吗? (毕竟 C++20 还没有出来)还是没有进入 20?
概念不能用于替换 C++20 中的类型名。 但是,这不是您的代码所做的。 您正在使用缩写的函数模板语法,通过声明参数的类型来使用占位符类型auto
。 可以通过将类型概念名称应用于auto
声明的参数来约束缩写函数模板(某些版本的 VS 没有实现缩写函数模板语法)。
但这不是Concepts-TS 中使用的语法,其中类型概念将替换类型名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.