【问题标题】:std::numbers has not been declared - GCC 11.2 on Windows尚未声明 std::numbers - Windows 上的 GCC 11.2
【发布时间】:2021-11-05 07:38:34
【问题描述】:

我在我的 Windows 10 机器上安装了 GCC 11.2.0(来自这里:https://winlibs.com/)。我已将环境变量 Path 更新为 C:\MinGW\bin

gcc version 11.2.0 (MinGW-W64 x86_64-posix-seh, built by Brecht Sanders)

我正在使用带有 C/C++ 扩展的 VSCode,该扩展配置为使用正确的编译器路径。

我想使用一个 C++20 特性,它是 std::numbers::sqrt2

我仍然收到一个错误,告诉我它不知道 std::numbers

    [Running] cd "c:\Users\XX\XX\" && g++ 
    main.cpp -o main && "c:\Users\XX\XX\"main
    main.cpp: In function 'double sin_x_plus_cos_sqrt2_times_x(double)':
    main.cpp:15:41: error: 'std::numbers' has not been declared
    15 |     return std::sin(x) + std::cos( std::numbers::sqrt2 * x );
       | 

我已经添加了标题#include <numbers>

我错过了什么?

【问题讨论】:

  • 此版本 gcc 的默认 c++ 版本是 C++17 使用 g++ main.cpp -o main -std=c++20 强制 C++20

标签: c++ gcc


【解决方案1】:

此版本 gcc 的默认 c++ 标准版本是 C++17。 看到这个:https://godbolt.org/z/4Pjzd5r7s

使用

g++ main.cpp -o main -std=c++20

强制 C++20

gcc 中对 C++20 有一些支持,但将其设为默认标准还为时过早。

【讨论】:

    【解决方案2】:

    我错过了什么?

    要使用C++20特性,需要选择C++20标准版本。

    【讨论】:

    • 文档中的 GCC 11.2 支持的内容
    • @SoaAlex 是的,C++20 是(实验性的)支持,如果你启用它的话。
    • -std=c++20 默认不开启。始终指定您正在编译的标准。
    • @NathanOliver 我不知道。 “编译反对”对我来说听起来很奇怪。我改为“选择”,因为这是 GCC 手册使用的词。
    • 哦,谢谢,添加-std=c++20 确实使构建成功。
    【解决方案3】:

    gcc 10 和 11 在命令行上都需要 -std=c++20 才能使 std::numbers 工作。 (旧版本根本不支持 std::numbers)

    https://gcc.gnu.org/projects/cxx-status.html#cxx20 显示在标准合规方面的进展。我希望标准的所有细节都得到满足后,该标准很快就会成为默认标准。截至 2021 年 11 月,除了 C++20“模块”功能的一些剩余细节之外,他们似乎拥有几乎所有东西。

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2018-03-09
      • 1970-01-01
      • 2017-02-07
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      相关资源
      最近更新 更多