Использование заголовков Boost.Thread с отключенными языковыми расширениями MSVC - PullRequest
2 голосов
/ 05 августа 2009

Я только что обнаружил, что когда языковые расширения отключены в MSVC, вы получите эту ошибку, если попытаетесь включить boost/thread/thread.hpp:

фатальная ошибка C1189: #error: "Поддержка потоков недоступна: она была явно отключена с помощью BOOST_DISABLE_THREADS"

Кажется, что когда Boost обнаруживает, что языковые расширения отключены (_MSC_EXTENSIONS не определено), они определяют BOOST_DISABLE_WIN32, чтобы указать, что небезопасно включать windows.h (который не будет компилироваться без расширений включен).

И как следствие , что #define, BOOST_DISABLE_THREADS определено, хотя Boost.Thread не является библиотекой только для заголовков, а windows.h включается только в файлы .cpp , Заголовки в принципе должны быть безопасными для использования без языковых расширений. Все фактические вызовы win32 изолированы в скомпилированной библиотеке (.dll или .lib)

Я вижу здесь , что они знают о проблеме, но, поскольку она оставалась нетронутой в течение последних двух лет, вероятно, наивно надеяться на быстрое решение.

Похоже, это должен быть довольно простой случай изменения некоторых #ifdef и #defines в различных файлах конфигурации Boost, но их много, и они определяют и используют много макросы, цель которых мне не ясна.

Кто-нибудь знает простой взлом или обходной путь, позволяющий включать заголовки Boost.Thread, когда языковые расширения отключены?

1 Ответ

2 голосов
/ 05 августа 2009

Я не вижу простого способа отключить поведение.

Вы можете обернуть блок своим собственным #ifdef, начиная с boost \ config \ suffix.hpp (214):

#ifndef TEMP_HACK_DONT_DISABLE_WIN32_THREADS // XXX TODO FIXME

#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \
   && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)
#  define BOOST_DISABLE_THREADS
#endif

#endif // ndef TEMP_HACK_DONT_DISABLE_WIN32_THREADS

Не идеальное исправление, но оно должно быть временным до тех пор, пока вы не сможете заставить их исправить это вверх по течению. Усилитель хорош, но не совершенен в своем совершенстве.

Конечно, сделайте какой-нибудь элемент отслеживания, чтобы не потерять отслеживание вашего отклонения от восходящего направления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...