Can current Clang be tricked into building boost?

I periodically build and use the current SVN revision of clang on OS X 10.7 and use it to build projects. It’s says something about the quality of CLang that this rarely causes issues.

But right now, at revision 187357 boost has compiler errors, at least on OS X. It isn’t clear to me what the problem is, but I can’t imagine I’m the only person to encounter this problem.

Error messages:

./boost/proto/transform/default.hpp:135: error: no type named ‘type’ in ‘struct boost::proto::detail::default_shift_leftboost::phoenix::meta_grammar::impl<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left, boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::phoenix::argument<2> >, 0l> >, boost::log::v2_mt_posix::expressions::attribute_actor<boost::mpl::vector2<std::basic_string<char, std::char_traits, std::allocator >, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, boost::log::v2_mt_posix::fallback_to_none, boost::log::v2_mt_posix::expressions::tag::message, boost::phoenix::actor> >, 2l>&, boost::phoenix::vector3<const boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_left, boost::proto::argsns_::list2<boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::phoenix::argument<2> >, 0l> >, boost::log::v2_mt_posix::expressions::attribute_actor<boost::mpl::vector2<std::basic_string<char, std::char_traits, std::allocator >, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, boost::log::v2_mt_posix::fallback_to_none, boost::log::v2_mt_posix::expressions::tag::message, boost::phoenix::actor> >, 2l> >*, const boost::log::v2_mt_posix::record_view&, boost::log::v2_mt_posix::basic_formatting_ostream<char, std::char_traits, std::allocator >&>&, const boost::phoenix::default_actions&>::nested_result_type’

./boost/utility/result_of.hpp:174: error: invalid use of incomplete type ‘struct boost::log::v2_mt_posix::expressions::aux::unary_function_terminal<boost::log::v2_mt_posix::expressions::has_attribute >::result<const boost::log::v2_mt_posix::expressions::aux::unary_function_terminal<boost::log::v2_mt_posix::expressions::has_attribute > ()(boost::phoenix::vector2<boost::phoenix::vector2<const boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::log::v2_mt_posix::expressions::aux::unary_function_terminal<boost::log::v2_mt_posix::expressions::has_attribute > >, 0l> >, const boost::log::v2_mt_posix::attribute_value_set&>&, const boost::phoenix::default_actions&>)>’
./boost/log/detail/unary_function_terminal.hpp:63: error: declaration of 'struct boost::log::v2_mt_posix::expressions::aux::unary_function_terminal<boost::log::v2_mt_posix::expressions::has_attribute >::result<const boost::log::v2_mt_posix::expressions::aux::unary_function_terminal<boost::log::v2_mt_posix::expressions::has_attribute > ()(boost::phoenix::vector2<boost::phoenix::vector2<const boost::phoenix::actor<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::log::v2_mt_posix::expressions::aux::unary_function_terminal<boost::log::v2_mt_posix::expressions::has_attribute > >, 0l> >
, const boost::log::v2_mt_posix::attribute_value_set&>&, const boost::phoenix::default_actions&>)>’

Please file a bug report.

-Eli

It will build if you add -std=c++11