gcc 6是否支持使用std :: sample(c ++ 17)?

时间:2018-09-10 22:32:30

标签: c++ gcc c++17 gcc6

我正在尝试使用 gcc版本6.3.0 和以下命令来编译包含std::sample的这段 c ++ 17 代码:{{1 }}。

但是我明白了:g++ -std=gnu++17 -c main.cpp ...

error: ‘sample’ is not a member of ‘std’

gcc 6是否支持使用#include <vector> #include <algorithm> #include <random> int main() { std::vector<int> a{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; std::vector<int> b(5); std::sample(a.begin(), a.end(), b.begin(), b.size(), std::mt19937{std::random_device{}()}); return 0; } ? (使用gcc 8.2.0可以正常编译)

在这两页上找不到答案:

3 个答案:

答案 0 :(得分:3)

不。从“库基础V1 TS组件:采样”下的table in the documentation中可以看出,支持std::sample的libstdc ++的最早版本是7.1版。

答案 1 :(得分:1)

  

gcc 6是否支持使用std :: sample?

不。您需要GCC7。来自GCC 7 release notes

  
      
  • 对C ++ 17的实验支持,包括以下新功能:

         
        
    • ...

    •   
    • std :: sample,std :: default_searcher,std :: boyer_moore_searcher和   std :: boyer_moore_horspool_searcher;

    •   
  •   

对于GCC 7,您可能需要-std=c++1z-std=gnu++1z,因为它是实验性的。

答案 2 :(得分:1)

是的,自GCC 5起,但直到GCC 7为止,它都位于std::experimental命名空间中,并在<experimental/algorithm>标头中定义。

摘自GCC 5发行说明:

  

运行时库(libstdc ++)

     
      
  • 改进了对图书馆基础知识TS的实验支持,包括:

         
        
    • 功能模板std :: experimental :: sample;
    •   
  •   

在GCC 5.1 https://wandbox.org/permlink/HWnX3qSgKbZO2qoH

上进行了测试