为什么 std::size() 不是 gcc 8.2.0 中 std 的成员

thu*_*ish 8 c++ gcc g++ standard-library

我正在尝试自学一些 C++17。

为什么编译器会为以下代码片段抛出错误?

#include <iostream> 
#include <vector>
#include <iterator>

int main() 
{
    std::vector<int> v = { 3, 1, 4 };
    std::cout << std::size(v) << '\n'; 

    int a[] = { -5, 10, 15 };
    std::cout << std::size(a) << '\n';
}
Run Code Online (Sandbox Code Playgroud)

编译器抛出以下错误

manish@Manish-Tummala:~/c_files$ g++ 6.cpp -o - 6.out
6.cpp: In function ‘int main()’:
6.cpp:8:23: error: ‘size’ is not a member of ‘std’
     std::cout << std::size(v) << '\n';
                       ^~~~
6.cpp:8:23: note: suggested alternative: ‘size_t’
     std::cout << std::size(v) << '\n';
                       ^~~~
                       size_t
6.cpp:11:23: error: ‘size’ is not a member of ‘std’
     std::cout << std::size(a) << '\n';
                       ^~~~
6.cpp:11:23: note: suggested alternative: ‘size_t’
     std::cout << std::size(a) << '\n';
                       ^~~~
                       size_t
Run Code Online (Sandbox Code Playgroud)

Flo*_*mer 9

关于 GCC 中的 C++17 支持,请参考:

从 GCC 11.1 开始,C++17 编译模式是默认的。在早期的 GCC 版本中,可以使用命令行参数启用:

要启用 C++17 支持,请将命令行参数添加-std=c++17g++命令行。或者,要启用除 C++17 功能之外的 GNU 扩展,请添加-std=gnu++17.

请注意,对于 GCC 9.1 之前的 GCC 版本,C++ 库 ABI 仍然被认为是不稳定的,因此如果您使用较早的编译器构建和链接您的应用程序,它可能无法与不同的 libstdc++ 运行时库版本(来自不同的 GCC版本,例如由操作系统升级引入)。