以下代码在 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中有效,它在concepts-ts中。这是微软支持其他实现的案例吗? (C++20 毕竟还没有出来)还是这没有进入 20?
最佳答案
概念不能用于替换 C++20 中的类型名。然而,这不是您的代码正在做的事情。您正在使用缩写函数模板语法,通过声明参数类型来使用占位符类型 auto
。可以通过将类型概念名称应用于 auto
声明的参数来限制缩写函数模板(某些版本的 VS 尚未实现缩写函数模板语法)。
但这不是Concepts-TS 中使用的语法,其中类型概念将替换类型名称。
关于c++ - 函数声明中作为类型名称的概念在 C++20 中有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64613432/