2013-06-08 6 views
1

Apple больше не продвигает GCC или libstdC++ на своей платформе, но они поставляют clang. По умолчанию при компиляции с предоставленным Apple clang в режиме C++ 11 стандартная стандартная библиотека по-прежнему остается libstdC++, которая слишком старая, чтобы нормально функционировать в режиме C++ 11.Что такое разумная минимальная версия libstdC++ для поддержки C++ 11

Я хотел бы проверить значение __GLIBCXX__ во время настройки и отказаться от попыток построить в режиме C++ 11 «слишком старый» libstdC++, например тот, который отправляет Apple. Поэтому мне нужно выбрать разумную минимальную версию.

Хотя GCC отлично справляется с перечислением поддержки функций языка в разных выпусках компилятора с this table, я не могу найти аналогичную таблицу, которая показывает библиотечные функции, поддерживаемые каждой версией libstdC++. Это затрудняет выбор разумного минимума, особенно если мой проект зависит от конкретных функций библиотеки при компиляции в режиме C++ 11.

Что такое ранний выпуск libstdC++, который предлагает некоторый значимый уровень поддержки возможностей библиотеки C++ 11? Я понимаю, что это субъективный вопрос - я больше ищу руководство от тех, кто решил этот вопрос в своих проектах. В качестве ограничений libstdC++ 4.2, очевидно, «вне» и 4.8 довольно четко «в». Где бы вы нарисовали линию, если бы вы решили это для своего проекта и почему?

+0

Почему бы вам не использовать скрипт 'configure' (или файл' CmakeLists.txt'), чтобы проверить, какие функции вам нужны? –

+2

Долгосрочные (например, несколько недель), да, это, безусловно, путь. В краткосрочной перспективе я хочу, чтобы пользователи не настраивали себя на очевидный провал с грубой проверкой на «достаточно недавний» libstdC++. Сейчас мне нужен большой молот, который позже будет заменен более совершенными инструментами. – acm

+0

@JoachimPileborg У вас есть ссылка, как проверить возможности C++ 11 в CMakeLists.txt? Звучит полезно! – TemplateRex

ответ

3

Я бы не потрудился с 4.4 или 4.5, они реализуют черновики C++ 0x, которые отличаются от окончательного стандарта некоторыми важными способами. 4,6 имеет довольно хорошую поддержку со всеми важными частями (перемещения семантики, <type_traits>, shared_ptr, unique_ptr, <thread>, <mutex>, <tuple>, неупорядоченных контейнеров, bind, function ...) и 4,7, вероятно, 90% завершено.

Вы должны быть в состоянии рассказать от http://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/status.html и http://gcc.gnu.org/onlinedocs/gcc-4.7.3/libstdc++/manual/status.html, но ссылки по какой-либо причине не работают.

Поддержка в 4,7 в настоящее время очень близко к тому, что в 4.8, как показано на http://gcc.gnu.org/onlinedocs/gcc-4.8.1/libstdc++/manual/manual/status.html#status.iso.2011

+0

у вас есть 2 ссылки из 3, которые мертвы – user2384250

+0

Я знаю, вы читали, что я сказал? _ «по какой-то причине ссылки сломаны». _ Я [сообщил об этом] (http://gcc.gnu.org/ml/gcc/2013-06/msg00045.html), поэтому он будет исправлен и ссылки будет работать. –

-1

быть разборчивы НКУ не libstdC++ означает, что один является компилятором, а другой представляет собой стандартную библиотеку, но так как они обычно распространяются в одном пакете, вы можете обратиться к this page и узнать, что вам нужно, и в какой версии GCC данная функция доступна.

+0

За исключением того, что страница охватывает только языковые функции, реализованные G ++, что совершенно неуместно, если использовать libstdC++ с clang, а не G ++ –

Смежные вопросы