Почему мой код C ++ 0x не компилируется, если я включаю опцию компилятора "-ansi"? - PullRequest
11 голосов
/ 02 мая 2011

Я столкнулся с действительно странной ошибкой, которая появляется только при использовании флага ansi.

#include <memory>

class Test
{
  public:
    explicit Test(std::shared_ptr<double> ptr) {}
};

Вот компиляция, протестированная с gcc 4.5.2 и 4.6.0 (20101127):

g++ -std=c++0x -Wall -pedantic -ansi test.cpp
test.cpp:6:34: error: expected ')' before '<' token

Но компиляция без -ansi работает.Почему?

Ответы [ 3 ]

10 голосов
/ 02 мая 2011

Для компилятора GNU C ++ -ansi - это другое имя для -std=c++98, которое переопределяет -std=c++0x, который вы имели ранее в командной строке.Вы, вероятно, хотите, чтобы

$ g++ -std=c++0x -Wall minimal.cpp

(-pedantic включено по умолчанию для C ++, поэтому нет необходимости повторять это снова. Если вы хотите использовать предупреждения, попробуйте добавить -Wextra.)

3 голосов
/ 02 мая 2011

std::shared_ptr не существует в c ++ 98. Попробуйте эти изменения:

#include <tr1/memory>
...
explicit Test(std::tr1::shared_ptr<double> ptr) {}   
0 голосов
/ 02 мая 2011

Гм, потому что еще нет стандарта ANSI для C ++ 0x?Флаг ANSI проверяет соответствие существующим стандартам, а не будущим.

...