函数声明中作为类型名称的概念在 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 中有效,它在 concepts-ts 中。这是微软落后于其他实施的情况吗? (毕竟 C++20 还没有出来)还是它没有变成 20?

C++20 中无法使用概念替换类型名。但是,那是 而不是 您的代码在做什么。您正在使用缩写函数模板语法,通过声明参数的类型来使用占位符类型 auto。可以通过将 type-concept 名称应用于 auto 声明的参数来限制缩写函数模板(某些版本的 VS 尚未实现缩写函数模板语法)。

但这不是 Concepts-TS 中使用的语法,其中类型概念将替换 类型名称。