我刚刚发现,在 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
修改一些's 和各种 Boost 配置文件似乎应该是一个相当简单的案例#defines
,但是其中有很多,它们定义和使用了很多我不清楚目的的宏.
有谁知道在禁用语言扩展时允许包含 Boost.Thread 标头的简单黑客或解决方法?