[英]How do I tell the C++ compiler on a supercomputer that my R package requires C++0x?
[英]Why does my C++0x code fail to compile if I include the “-ansi” compiler option?
我遇到了一个非常奇怪的错误,只有在我使用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
的编译是有效的。 为什么?
对于 GNU C++ 编译器, -ansi
是-std=c++98
的另一个名称,它覆盖了您之前在命令行中使用的-std=c++0x
。 你可能只想
$ g++ -std=c++0x -Wall minimal.cpp
( -pedantic
默认为 C++ 开启,因此无需再说一遍。如果您想要更挑剔的警告,请尝试添加-Wextra
。)
std::shared_ptr
在 c++98 中不存在。 尝试以下更改:
#include <tr1/memory>
...
explicit Test(std::tr1::shared_ptr<double> ptr) {}
嗯,因为 C++0x 还没有 ANSI 标准? ANSI 标志检查是否符合现有标准,而不是未来标准。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.