Kul*_*007 6 c++ libstdc++ c++17
我正在尝试将应用程序升级到C ++ 17并收到以下编译器错误:
error: ‘__BEGIN_NAMESPACE_STD’ does not name a type
Run Code Online (Sandbox Code Playgroud)
我正在使用gcc(GCC)8.2.0并使用以下命令进行编译:
g++ -std=c++17 variant.cpp -o variant
Run Code Online (Sandbox Code Playgroud)
这是一个小测试程序:
#include <iostream>
#include <variant>
using v_t = std::variant<int, double>;
int main(int argc, char const* argv[]) {
v_t foo = 5;
printf("foo contains %d\n", *std::get_if<int>(&foo));
std::cout << "Success" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误(如下)。请注意,如何在stdlib.h中启用__BEGIN_NAMESPACE_STD讨论了类似的问题,但是建议的解决方案(包括C ++头文件,而不是诸如stdlib.h之类的C头文件)是我已经在做的事情。
我能够在OSX便携式计算机上编译此代码,可能是因为默认情况下安装了更新的libc。但是,当我在Linux机器上运行时,出现这些错误。在Linux机器上,我正在使用以下链接器/ glibc版本:ldd (Ubuntu EGLIBC 2.19-0ubuntu6.14) 2.19
我正在继续调试,但是希望有朝正确方向发展的指针。
In file included from /toolchains/gcc-8.2.0/include/c++/8.2.0/cstdlib:75,
from /toolchains/gcc-8.2.0/include/c++/8.2.0/ext/string_conversions.h:41,
from /toolchains/gcc-8.2.0/include/c++/8.2.0/bits/basic_string.h:6391,
from /toolchains/gcc-8.2.0/include/c++/8.2.0/string:52,
from /toolchains/gcc-8.2.0/include/c++/8.2.0/bits/locale_classes.h:40,
from /toolchains/gcc-8.2.0/include/c++/8.2.0/bits/ios_base.h:41,
from /toolchains/gcc-8.2.0/include/c++/8.2.0/ios:42,
from /toolchains/gcc-8.2.0/include/c++/8.2.0/ostream:38,
from /toolchains/gcc-8.2.0/include/c++/8.2.0/iostream:39,
from variant.cpp:1:
/usr/include/stdlib.h:95:1: error: ‘__BEGIN_NAMESPACE_STD’ does not name a type
__BEGIN_NAMESPACE_STD
^~~~~~~~~~~~~~~~~~~~~
/usr/include/stdlib.h:101:5: error: ‘div_t’ does not name a type; did you mean ‘pid_t’?
} div_t;
^~~~~
pid_t
/usr/include/stdlib.h:112:1: error: ‘__END_NAMESPACE_STD’ does not name a type
__END_NAMESPACE_STD
^~~~~~~~~~~~~~~~~~~
/usr/include/stdlib.h:121:5: error: ‘lldiv_t’ does not name a type; did you mean ‘ldiv_t’?
} lldiv_t;
^~~~~~~
Run Code Online (Sandbox Code Playgroud)