Я пытаюсь обновить приложение до C ++ 17 и получаю следующую ошибку компилятора:
error: ‘__BEGIN_NAMESPACE_STD’ does not name a type
Я использую gcc (GCC) 8.2.0 и компилирую с помощью следующей команды:
g++ -std=c++17 variant.cpp -o variant
Вот небольшая тестовая программа:
#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;
}
И вот ошибка, которую я получаю (ниже).Обратите внимание, что как включить __BEGIN_NAMESPACE_STD в stdlib.h обсуждает похожую проблему, но предлагаемое решение (включая заголовки C ++, а не заголовки C, такие как stdlib.h), я уже делаю.
Я могу скомпилировать этот код на моем ноутбуке с 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;
^~~~~~~