Opened 11 years ago
Closed 6 years ago
#6268 closed Bugs (fixed)
Conflict between fusion and phoenix operator<
Reported by: | Owned by: | Thomas Heller | |
---|---|---|---|
Milestone: | To Be Determined | Component: | phoenix |
Version: | Boost Development Trunk | Severity: | Problem |
Keywords: | Cc: |
Description
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 <boost/fusion/sequence/comparison.hpp> #include <boost/fusion/sequence/sequence_facade.hpp> #include <boost/phoenix/core.hpp> #include <boost/phoenix/operator/comparison.hpp> struct foo : boost::fusion::sequence_facade<foo, boost::fusion::random_access_traversal_tag> {
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<boost::proto::tagns_::tag::proto_expr> ::unsegmented_size<
boost::phoenix::actor<
boost::proto::exprns_::basic_expr<
boost::proto::tagns_::tag::terminal
, boost::proto::argsns_::term<boost::phoenix::argument<1> >, 0l
':
boost/boost/fusion/sequence/intrinsic/size.hpp:36:20: required from
'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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> > , 0l
, boost::fusion::result_of::size<foo> '
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<foo> '
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<foo> , mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> '
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<foo>, mpl_::bool_<false>
, mpl_::bool_<false>, mpl_::bool_<false>
, 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<foo> , mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> '
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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> > , 0l
, boost::fusion::result_of::size<foo> '
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<foo> '
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<foo> , mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> '
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<foo>, mpl_::bool_<false>
, mpl_::bool_<false>, mpl_::bool_<false>
, 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<foo> , mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> '
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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> > , 0l
, boost::fusion::result_of::size<foo> '
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<foo> '
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<foo> , mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> '
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<foo>, mpl_::bool_<false>
, mpl_::bool_<false>, mpl_::bool_<false>
, 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<foo> , mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> '
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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> >, 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<foo> ':
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<foo> , mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> '
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<foo>, mpl_::bool_<false>
, mpl_::bool_<false>, mpl_::bool_<false>
, 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<foo> , mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> '
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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 0l
, boost::fusion::result_of::size<foo> '
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<foo> , mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> ':
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<foo>, mpl_::bool_<false>
, mpl_::bool_<false>, mpl_::bool_<false>
, 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<foo> , mpl_::bool_<true>, mpl_::bool_<true>, mpl_::bool_<true> '
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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<foo> '
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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> > , 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<boost::phoenix::argument<1> >, 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<boost::phoenix::argument<1> >, 0l
, foo, void '
Change History (4)
comment:1 by , 11 years ago
comment:2 by , 11 years ago
The error can be fixed by adding the following include:
#include <boost/proto/fusion.hpp>
comment:4 by , 6 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Compiler picks correct overload now. http://melpon.org/wandbox/permlink/1M41RhgXNvI003Sd
Sorry, that didn't come out well and I don't know how to edit the description :(
Here is the code that causes the error, in code tags this time: