Каково текущее состояние поддержки "thread_local" на разных платформах?
Мне хотелось бы получить резюме о том, какое текущее состояние поддержки ключевого слова "thread_local" доступно для разных компиляторов и платформ.
Меня особенно интересуют обычные настольные и мобильные платформы. Информация, которую я мог найти, кажется пятнистой в лучшем случае с сообщениями о том, что она работает на некоторых платформах, а не на других, или упоминания о поддержке, являющейся WIP. Ответы, подтверждающие поддержку (или отсутствие поддержки) даже для отдельных платформ, приветствуются. Пожалуйста, укажите какие-либо оговорки в поддержку, если они есть.
- Windows (gcc, clang, msvc)
- Linux (gcc, clang)
- OS X (gcc, clang)
- Android (gcc, clang)
- IOS
- BlackBerry
- Windows Phone/RT/etc
Ответы
Ответ 1
В дополнение к другому отличному ответу: MSVC 2013 в настоящее время не поддерживает его.
Эта страница для поддержки основных функций языка утверждает, что она частично поддерживается. Однако, глядя на детали, кажется, что:
Локальное хранилище нитей указано как "Частичное", поскольку VC предоставил нестандартное расширение __declspec (поток) в течение многих лет. (Примечательно, что С++ 11 thread_local поддерживает не-POD, но __declspec (thread) не делает.)
Он реализован в MSVC 2014 CTP 3 (с лета 2014 года, см. запись в блоге) и доступен в MSVS2015.
Ответ 2
Для clang
вы можете проверить статус реализации С++ 11:
Функция языка: Потоковое локальное хранилище
С++ 11 Предложение: N2659
Доступен в Clang? Clang 3.3
и
Clang 3.3 и более поздние версии реализуют все стандарт ISO С++ 2011.... Для поддержки thread_local
в настоящее время требуется библиотека времени выполнения С++ из g++ - 4.8 или новее.
Вы также можете использовать libС++, который является "полной реализацией С++ 11 на Apple OS X".