繁体   English   中英

函数声明中作为类型名称的概念在 C++20 中有效吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM