Почему std :: size () не является членом std в gcc 8.2.0 - PullRequest
1 голос
/ 16 марта 2019

Я пытаюсь научить себя немного 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';
}

Компилятор выдает следующую ошибку

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

Ответы [ 2 ]

3 голосов
/ 16 марта 2019

Для поддержки C ++ 17 в GCC, пожалуйста, обратитесь к:

Для времениПоскольку поддержка C ++ 17 по умолчанию не включена:

Чтобы включить поддержку C ++ 17, добавьте параметр командной строки -std=c++17 в командную строку g++.Или, чтобы включить расширения GNU в дополнение к функциям C ++ 17, добавьте -std=gnu++17.

. В настоящее время ABI C ++ 17 для GCC еще не завершен.Это означает, что программы, созданные сегодня в режиме C ++ 17, могут не иметь возможности связываться с прошлыми или будущими двоичными файлами, также скомпилированными в режиме C ++ 17 (или сбоем во время выполнения).Стабильный ABI обеспечивает такую ​​совместимость между версиями компилятора.

Как только ABI будет окончательным, будущая версия GCC по умолчанию включит режим C ++ 17.

0 голосов
/ 18 марта 2019

Ваша установка g ++ должна быть версии 6 или выше.Вы можете проверить это с помощью

g++ -v

Если ваша версия g ++ достаточно высока.Вы также должны выполнить его с параметром командной строки c ++ 17.

g++ -std=c++17 6.cpp -o - 6.out

или

g++ -std=gnu++17 6.cpp -o - 6.out
...