Почему мой код С++ 0x не удается скомпилировать, если включить параметр компилятора "-ansi"?
Я столкнулся с действительно странной ошибкой, которая появляется только, если я использую флаг 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
работает. Почему?
Ответы
Ответ 1
Для компилятора GNU С++ -ansi
- это другое имя для -std=c++98
, которое переопределяет -std=c++0x
, который вы ранее использовали в командной строке. Вы, вероятно, хотите просто
$ g++ -std=c++0x -Wall minimal.cpp
(-pedantic
включен по умолчанию для С++, поэтому вам не нужно повторять это снова.Если вы хотите, чтобы предупреждения pickier, попробуйте добавить -Wextra
.)
Ответ 2
std::shared_ptr
не существует в С++ 98. Попробуйте следующие изменения:
#include <tr1/memory>
...
explicit Test(std::tr1::shared_ptr<double> ptr) {}
Ответ 3
Um, потому что для С++ 0x еще нет стандарта ANSI? Флаг ANSI проверяет соответствие существующим стандартам, а не будущим.