我正在使用与 Xcode 4.6 一起打包的 clang++ (clang-421.0.60),但遇到了 boost::spirit 的问题。如果我在没有任何标志的情况下编译,一切都编译得很好。如果我使用 '-std=c++11' 编译,则会收到以下错误(包括“boost/spirit/include/qi.hpp”):
In file included from test_spirit11.cpp:1:
In file included from /usr/local/include/boost/spirit/include/qi.hpp:16:
In file included from /usr/local/include/boost/spirit/home/qi.hpp:14:
In file included from /usr/local/include/boost/spirit/home/qi/action.hpp:14:
In file included from /usr/local/include/boost/spirit/home/qi/action/action.hpp:21:
/usr/local/include/boost/spirit/home/support/action_dispatch.hpp:21:10: fatal error:
'type_traits' file not found
#include <type_traits>
问题是使用的默认库 (stdlibc++) 将 type_traits 定义为“tr1/type_traits”,而 boost::spirit 只需要“type_traits”。我当然可以通过以下方式解决这个问题:
clang++ -std=c++11 -stdlib=libc++ <...>
虽然我很想使用 libc++,但这样做的实用性很困难(许多库仍然使用并依赖于 stdlibc++)。因此,我被迫不使用 libc++。
有人对如何处理这个问题有任何建议吗?我真的希望更多的库维护者支持 libc++,或者 Apple 提供更新版本的 stdlibc++。能够访问新的 c++11 功能,但由于缺乏库支持而无法完全使用它们是一个很大的挫折。