libc++ - прекратить переименование std в std::_1?

После значительных усилий по компиляции, запуску, интеграции с NetBeans и даже кросс-компиляции на 32-разрядную машину, я подумал, что все понял! Поэтому я использую некоторые функции, которых не было в libstdc++ (вся причина перевернуть мою среду разработки с ног на свою среду), и обнаруживаю... На самом деле я не могу этого сделать.

libc++ установлен, он работает, и скомпилированная программа (когда она работает) требует этого. Тем не менее, компилятор по-прежнему пытается использовать версии libstdc++ при каждой возможности, возясь с пространством имен; std::_1::map, std::_1::basic_string и так далее. Теперь я знаю из этого вопроса, почему это происходит, и почему libc++ делает это.Мне просто нужно знать, как уничтожить его, потому что это совершенно неприменимо - я очень, действительно хочу использовать версии libc++, и в моем коде нет ничего, что потребовало бы сосуществовать двум типам.

Я попытался вывести папки libstdc++ из пути включения, и, в противном случае, сделал их полностью недоступными. Не повезло. Я не использую никаких библиотек дополнений, только встроенные заголовки Linux/POSIX (errno, socket, syslog, fcntl).

EDIT: Сообщение об ошибке:

CoreCache.cpp:61:12: error: no member named 'emplace' in 'std::__1::map, CacheEntry, std::__1::less >, std::__1::allocator, CacheEntry> > >'

Карта libstdc++ не имеет emplace(). Версия libc++ делает.

Следующий вызов из командной строки, кажется, работает:

clang++ -o stachecache -I /usr/local/lib/clang/3.1/include/ -I /usr/include/c++/v1/ -std=c++0x -stdlib=libc++ ./*.cpp

Вызов из NetBeans не работает:

clang++ -stdlib=libc++ -O3   -c -O3 -Werror -MMD -MP -MF build/Release/clang-Linux-x86/CoreCache.o.d -o build/Release/clang-Linux-x86/CoreCache.o CoreCache.cpp

10
задан Community 23 May 2017 в 11:58
поделиться