id summary reporter owner description type status milestone component version severity resolution keywords cc 6268 Conflict between fusion and phoenix operator< Nathan Ridge Thomas Heller "When using the sequence_facade extension mechanism to adapt my own Fusion sequences, I experience a conflict between fusion and phoenix's operator<. The problem is that in a lambda expression like ""arg1 < s"" where ""s"" is a Fusion sequence defined using sequence_facade, Fusion tries to instantiate its operator<, but the instantiation gives an error because ""arg1"" is not a Fusion sequence and does not have ""size"" etc. Here is a minimal sample that reproduces the problem: #include #include #include #include struct foo : boost::fusion::sequence_facade { // Rest of the sequence_facade extension mechanism code omitted, // as it is not needed to reproduce the error foo() : x(), y() {} int x; int y; }; int main() { auto x = boost::phoenix::arg_names::arg1 < foo(); } Here are the errors: In file included from boost/boost/fusion/view/joint_view/joint_view.hpp:15:0, from boost/boost/fusion/algorithm/transformation/push_back.hpp:11, from boost/boost/fusion/view/iterator_range/detail/segmented_iterator_ range.hpp:19,a from boost/boost/fusion/view/iterator_range/detail/segments_impl.hpp :13, from boost/boost/fusion/view/iterator_range/iterator_range.hpp:21, from boost/boost/fusion/view/iterator_range.hpp:10, from boost/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp :12, from boost/boost/fusion/sequence/intrinsic/begin.hpp:17, from boost/boost/fusion/sequence/comparison/equal_to.hpp:11, from boost/boost/fusion/sequence/comparison.hpp:10, from test.cpp:1: boost/boost/fusion/sequence/intrinsic/size.hpp: In instantiation of 'boost::fusion::extension::size_impl ::unsegmented_size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > > >': boost/boost/fusion/sequence/intrinsic/size.hpp:36:20: required from 'boost::fusion::extension::size_impl ::apply< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > > >' boost/boost/fusion/sequence/intrinsic/size.hpp:68:16: required from 'boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > > >' boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp:60:29: required from 'boost::mpl::equal_to_tag< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > > > >' boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp:67:8: required from 'boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > > >, boost::fusion::result_of::size >' boost/boost/mpl/aux_/nested_type_wknd.hpp:26:31: required from 'boost::mpl::aux::nested_type_wknd< boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size > >' boost/boost/mpl/aux_/preprocessed/gcc/and.hpp:23:8: required from 'boost::mpl::aux::and_impl< true , boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size >, mpl_::bool_, mpl_::bool_, mpl_::bool_ >' boost/boost/mpl/aux_/preprocessed/gcc/and.hpp:48:8: required from 'boost::mpl::and_< boost::mpl::or_< boost::fusion::traits::is_sequence< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::traits::is_sequence, mpl_::bool_ , mpl_::bool_, mpl_::bool_ >, boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size >, mpl_::bool_, mpl_::bool_, mpl_::bool_ >' boost/boost/fusion/sequence/comparison/enable_comparison.hpp:26:12: required from 'boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >, foo, void >' boost/boost/utility/enable_if.hpp:36:10: required from 'boost ::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >, foo, void >, bool >' boost/boost/fusion/sequence/comparison/less.hpp:35:9: required by substitution of 'template< class boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo, class Seq2 > boost::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >; Seq2 = foo, Seq2 >, bool >::type boost::fusion::operators::operator<( const boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo &, const Seq2 & )' test.cpp:19:52: required from here boost/boost/fusion/sequence/intrinsic/size.hpp:33:20: error: no type named 'size' in 'boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >' boost/boost/fusion/sequence/intrinsic/size.hpp: In instantiation of 'boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > > >': boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp:60:29: required from 'boost::mpl::equal_to_tag< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > > > >' boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp:67:8: required from 'boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > > >, boost::fusion::result_of::size >' boost/boost/mpl/aux_/nested_type_wknd.hpp:26:31: required from 'boost::mpl::aux::nested_type_wknd< boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size > >' boost/boost/mpl/aux_/preprocessed/gcc/and.hpp:23:8: required from 'boost::mpl::aux::and_impl< true , boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size >, mpl_::bool_, mpl_::bool_, mpl_::bool_ >' boost/boost/mpl/aux_/preprocessed/gcc/and.hpp:48:8: required from 'boost::mpl::and_< boost::mpl::or_< boost::fusion::traits::is_sequence< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::traits::is_sequence, mpl_::bool_ , mpl_::bool_, mpl_::bool_ >, boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size >, mpl_::bool_, mpl_::bool_, mpl_::bool_ >' boost/boost/fusion/sequence/comparison/enable_comparison.hpp:26:12: required from 'boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >, foo, void >' boost/boost/utility/enable_if.hpp:36:10: required from 'boost ::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >, foo, void >, bool >' boost/boost/fusion/sequence/comparison/less.hpp:35:9: required by substitution of 'template< class boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo, class Seq2 > boost::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >; Seq2 = foo, Seq2 >, bool >::type boost::fusion::operators::operator<( const boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo &, const Seq2 & )' test.cpp:19:52: required from here boost/boost/fusion/sequence/intrinsic/size.hpp:74:44: error: no type named 'type' in 'boost::fusion::extension::size_impl< boost::proto::tagns_::tag::proto_expr >::apply< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > > >' In file included from boost/boost/mpl/aux_/include_preprocessed.hpp :37:0, from boost/boost/mpl/aux_/comparison_op.hpp:35, from boost/boost/mpl/equal_to.hpp:19, from boost/boost/fusion/container/list/detail/equal_to_impl.hpp:11, from boost/boost/fusion/container/list/cons_iterator.hpp:16, from boost/boost/fusion/container/list/cons.hpp:17, from boost/boost/fusion/iterator/segmented_iterator.hpp:13, from boost/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp :11, from boost/boost/fusion/sequence/intrinsic/begin.hpp:17, from boost/boost/fusion/sequence/comparison/equal_to.hpp:11, from boost/boost/fusion/sequence/comparison.hpp:10, from test.cpp:1: boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp: In instantiation of 'boost::mpl::equal_to_tag< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > > > >': boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp:67:8: required from 'boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > > >, boost::fusion::result_of::size >' boost/boost/mpl/aux_/nested_type_wknd.hpp:26:31: required from 'boost::mpl::aux::nested_type_wknd< boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size > >' boost/boost/mpl/aux_/preprocessed/gcc/and.hpp:23:8: required from 'boost::mpl::aux::and_impl< true , boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size >, mpl_::bool_, mpl_::bool_, mpl_::bool_ >' boost/boost/mpl/aux_/preprocessed/gcc/and.hpp:48:8: required from 'boost::mpl::and_< boost::mpl::or_< boost::fusion::traits::is_sequence< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::traits::is_sequence, mpl_::bool_ , mpl_::bool_, mpl_::bool_ >, boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size >, mpl_::bool_, mpl_::bool_, mpl_::bool_ >' boost/boost/fusion/sequence/comparison/enable_comparison.hpp:26:12: required from 'boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >, foo, void >' boost/boost/utility/enable_if.hpp:36:10: required from 'boost ::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >, foo, void >, bool >' boost/boost/fusion/sequence/comparison/less.hpp:35:9: required by substitution of 'template< class boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo, class Seq2 > boost::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >; Seq2 = foo, Seq2 >, bool >::type boost::fusion::operators::operator<( const boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo &, const Seq2 & )' test.cpp:19:52: required from here boost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp:60:29: error: no type named 'tag' in 'boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > > >' In file included from boost/boost/mpl/not.hpp:19:0, from boost/boost/mpl/is_sequence.hpp:17, from boost/boost/fusion/support/detail/is_mpl_sequence.hpp:12, from boost/boost/fusion/support/tag_of.hpp:13, from boost/boost/fusion/support/is_sequence.hpp:11, from boost/boost/fusion/sequence/intrinsic_fwd.hpp:12, from boost/boost/fusion/sequence/intrinsic/begin.hpp:13, from boost/boost/fusion/sequence/comparison/equal_to.hpp:11, from boost/boost/fusion/sequence/comparison.hpp:10, from test.cpp:1: boost/boost/mpl/aux_/nested_type_wknd.hpp: In instantiation of 'boost ::mpl::aux::nested_type_wknd< boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size > >': boost/boost/mpl/aux_/preprocessed/gcc/and.hpp:23:8: required from 'boost::mpl::aux::and_impl< true , boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size >, mpl_::bool_, mpl_::bool_, mpl_::bool_ >' boost/boost/mpl/aux_/preprocessed/gcc/and.hpp:48:8: required from 'boost::mpl::and_< boost::mpl::or_< boost::fusion::traits::is_sequence< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::traits::is_sequence, mpl_::bool_ , mpl_::bool_, mpl_::bool_ >, boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size >, mpl_::bool_, mpl_::bool_, mpl_::bool_ >' boost/boost/fusion/sequence/comparison/enable_comparison.hpp:26:12: required from 'boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >, foo, void >' boost/boost/utility/enable_if.hpp:36:10: required from 'boost ::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >, foo, void >, bool >' boost/boost/fusion/sequence/comparison/less.hpp:35:9: required by substitution of 'template< class boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo, class Seq2 > boost::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >; Seq2 = foo, Seq2 >, bool >::type boost::fusion::operators::operator<( const boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo &, const Seq2 & )' test.cpp:19:52: required from here boost/boost/mpl/aux_/nested_type_wknd.hpp:26:31: error: no type named 'type' in 'boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > > >, boost::fusion::result_of::size >' In file included from boost/boost/mpl/aux_/include_preprocessed.hpp :37:0, from boost/boost/mpl/and.hpp:42, from boost/boost/mpl/is_sequence.hpp:18, from boost/boost/fusion/support/detail/is_mpl_sequence.hpp:12, from boost/boost/fusion/support/tag_of.hpp:13, from boost/boost/fusion/support/is_sequence.hpp:11, from boost/boost/fusion/sequence/intrinsic_fwd.hpp:12, from boost/boost/fusion/sequence/intrinsic/begin.hpp:13, from boost/boost/fusion/sequence/comparison/equal_to.hpp:11, from boost/boost/fusion/sequence/comparison.hpp:10, from test.cpp:1: boost/boost/mpl/aux_/preprocessed/gcc/and.hpp: In instantiation of 'boost::mpl::aux::and_impl< true , boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size >, mpl_::bool_, mpl_::bool_, mpl_::bool_ >': boost/boost/mpl/aux_/preprocessed/gcc/and.hpp:48:8: required from 'boost::mpl::and_< boost::mpl::or_< boost::fusion::traits::is_sequence< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::traits::is_sequence, mpl_::bool_ , mpl_::bool_, mpl_::bool_ >, boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size >, mpl_::bool_, mpl_::bool_, mpl_::bool_ >' boost/boost/fusion/sequence/comparison/enable_comparison.hpp:26:12: required from 'boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >, foo, void >' boost/boost/utility/enable_if.hpp:36:10: required from 'boost ::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >, foo, void >, bool >' boost/boost/fusion/sequence/comparison/less.hpp:35:9: required by substitution of 'template< class boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo, class Seq2 > boost::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >; Seq2 = foo, Seq2 >, bool >::type boost::fusion::operators::operator<( const boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo &, const Seq2 & )' test.cpp:19:52: required from here boost/boost/mpl/aux_/preprocessed/gcc/and.hpp:23:8: error: 'value' is not a member of 'boost::mpl::aux::nested_type_wknd< boost::mpl::equal_to< boost::fusion::result_of::size< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term< boost::phoenix::argument<1> >, 0l > > >, boost::fusion::result_of::size > >' In file included from boost/boost/fusion/sequence/intrinsic/begin.hpp :11:0, from boost/boost/fusion/sequence/comparison/equal_to.hpp:11, from boost/boost/fusion/sequence/comparison.hpp:10, from test.cpp:1: boost/boost/utility/enable_if.hpp: In instantiation of 'boost ::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >, foo, void >, bool >': boost/boost/fusion/sequence/comparison/less.hpp:35:9: required by substitution of 'template< class boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo, class Seq2 > boost::enable_if< boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term > , 0l > >; Seq2 = foo, Seq2 >, bool >::type boost::fusion::operators::operator<( const boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >; Seq2 = foo &, const Seq2 & )' test.cpp:19:52: required from here boost/boost/utility/enable_if.hpp:36:10: error: 'value' is not a member of 'boost::fusion::traits::enable_comparison< boost::phoenix::actor< boost::proto::exprns_::basic_expr< boost::proto::tagns_::tag::terminal , boost::proto::argsns_::term >, 0l > >, foo, void >'" Bugs closed To Be Determined phoenix Boost Development Trunk Problem fixed