C ++ 17 std :: shared_mutex еще не доступен?

Смотря на Поддержка компилятора C ++, кажется, что несвязанная версия std::shared_mutex доступно в GCC 5.0+. Однако даже при gcc version 5.3.0 20151204 (Ubuntu 5.3.0-3ubuntu1~14.04)и компилировать с -std=c++1zпростая инициализация разделяемого мьютекса заканчивается:

error: ‘shared_mutex’ in namespace ‘std’ does not name a type
std::shared_mutex mutex_;

И нет, я уже включил правильный заголовок: #include <shared_mutex>,

Он не может найти правильный заголовок, потому что он, кажется, не существует. На самом деле, компоновщик использует библиотеку в /usr/include/c++/5/shared_mutex, который содержит только реализацию std::shared_timed_mutex (как стандарт C ++ 14).

Я установил gcc-5 и g ++ — 5, добавив хранилище в ppa:ubuntu-toolchain-r/test и используя update-alternatives правильно настроить свои контейнеры.

Что я могу сделать, чтобы правильно скомпилировать мой код, используя новейший стандарт C ++ 17? И, вероятно, глупый вопрос, но слишком рано, чтобы начать использовать -std=c++1z даже если это должно быть уже поддержано? Потому что это поддерживается, верно?

5

Решение

Беспорядок на cppreference был, вероятно, потому что std::shared_mutex действительно было добавлен в GCC 5.0, в пересмотр 200134. Но это было раннее воплощение этого типа на основе черновика C ++ 1y. На самом деле это был приуроченная общий мьютекс, который назывался std::shared_mutex в это время.

До публикации окончательного стандарта C ++ 14 std::shared_mutex был переименован в std::shared_timed_mutexи так до выпуска GCC 5.1 (который является первым выпуском в серии 5.x) тип в libstdc ++ был переименован, см. редакция 207964.

Поэтому, хотя в какой-то момент на этапе предварительной версии GCC 5.x произошла std::shared_mutex типа, это был не C ++ 17 несвязанный, и он был переименован до появления в любом официальном выпуске GCC.

Затем, во время разработки серии выпусков GCC 6.x, был добавлен общий мьютекс C ++ 1z untimed, повторно используя std::shared_mutex название. Это коммит T.C. ссылка на в комментариях выше, редакция 224158.

Так что C ++ 17 Untimed shared_mutex никогда не было ни в одной версии GCC 5.x. За короткий период до выхода первой версии 5.x приуроченная один называется std::shared_mutex, но во всех правильных выпусках 5.x это называется std::shared_timed_mutex,

Первый выпуск C ++ 17 в несвязанном виде был 6.1 в апреле 2016 года.

GCC 5 был выпущен в 2015 году, поэтому ожидать использования C ++ 17 с этой версией немного нереально. GCC 6.x и 7.x имеют довольно хорошую поддержку C ++ 1z (но, конечно, только на основе текущих черновиков на момент выпуска).

7

Другие решения

ты можешь использовать boost::shared_mutex вместо std::shared_mutex

0

По вопросам рекламы [email protected]