Правильный синтаксис:
timed_mutex() : _M_mutex({__GTHREAD_MUTEX_INIT}) { } // i.e. _M_mutex({{0}})
Однако эта функция доступна только с C ++ 11 . Демо .
Для более старых компиляторов вы не можете использовать список инициализатора с конструктором.
Причина наличия 2 {}
заключается в том, что pthread_mutex_t
представляет собой union
, определенный как , показанный здесь . Который содержит, struct
, char[24]
, long int
; таким образом, естественно, синтаксис инициализации будет отличаться.
Обновление:
Когда я пытался скомпилировать заголовок <mutex>
в тестовом файле, он выдает следующую ошибку:
/ usr / include / c ++ / 4.6 / bits / c ++ 0x_warning.h: 32: 2: ошибка: #error This
Файл требует поддержки компилятора и библиотеки для предстоящего ISO C ++
стандарт, C ++ 0x. Эта поддержка в настоящее время является экспериментальной и должна быть
включен с опциями компилятора -std = c ++ 0x или -std = gnu ++ 0x .
Вполне возможно, что конкретный файл следует синтаксису инициализатора в C ++ 11.