Поддерживает ли gcc 6 использование std :: sample (c ++ 17)? - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь скомпилировать этот фрагмент кода c ++ 17 , который содержит std::sample, используя gcc версии 6.3.0 с помощью следующей команды: g++ -std=gnu++17 -c main.cpp.

Но я получаю это: error: ‘sample’ is not a member of ‘std’ ...

#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 6 использование std::sample? (Отлично компилируется с gcc 8.2.0)

Я не смог найти ответ на этих двух страницах:

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Поддерживает ли gcc 6 использование std :: sample?

Нет.Вам необходим GCC 7. Из примечаний к выпуску GCC 7 :

  • Экспериментальная поддержка C ++ 17, включая следующие новые функции:

    • ...

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

Для GCC 7 вам может понадобиться -std=c++1z или -std=gnu++1z, поскольку он является экспериментальным.

0 голосов
/ 11 сентября 2018

Да, начиная с GCC 5 , но до GCC 7 оно находится в std::experimental пространстве имен и определено в заголовке <experimental/algorithm>.

Из GCC 5 ReleaseПримечания:

Библиотека времени выполнения (libstdc ++)

  • Улучшена экспериментальная поддержка TS Основ библиотеки, в том числе:

    • шаблон функции std :: эксперимент :: :: sample;

Проверено на GCC 5.1 https://wandbox.org/permlink/HWnX3qSgKbZO2qoH

0 голосов
/ 11 сентября 2018

Нет.Из таблицы в документации в разделе «Библиотечные компоненты V1 TS Components: Sampling» видно, что самая ранняя версия libstdc ++ для поддержки std::sample - это версия 7.1

...