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

标签 c++ c++20 c++-concepts

以下代码在 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/

相关文章:

c++ - C++ 概念的通配符为 "accepting anything for this template argument"

c++ - 为什么概念细化不能使用简洁的语法

c# - 是否可以通过从 C# 代码调用 assemblyInstaller.Install 来安装用 C++(使用 CreateService WINAPI)编写的 Windows 服务(EXE)?

c++ - Clang 找不到 `-fprebuilt-module-path` 的 C++ 模块

c++ - MacOS std::chrono::clock_cast 未找到

c++ - 使用 MSVC 的模块中的访问冲突

c++ - 检查可变参数模板函数的概念

c++ - OpenGL - 一个简单的程序

C++11 std::regex_match 返回额外字符

c# - 调用 native 代码的多线程托管应用程序