Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Building errors #14

Closed
Cruel opened this issue May 15, 2015 · 5 comments
Closed

Building errors #14

Cruel opened this issue May 15, 2015 · 5 comments

Comments

@Cruel
Copy link
Contributor

Cruel commented May 15, 2015

Wish I had time to be more specific and look into it, but all these templating/Boost errors seem to require more knowledge about the code than I have. So it's easier addressed by someone else.

I'm on Arch Linux with Boost version 1.58.0

Cmake builds assembler.cpp fine, but errors on parser_assembly.cpp. Here's my stderr:

http://ix.io/izC

In file included from /usr/include/boost/spirit/home/qi/detail/attributes.hpp:12:0,
                 from /usr/include/boost/spirit/home/qi/action/action.hpp:16,
                 from /usr/include/boost/spirit/home/qi/action.hpp:14,
                 from /usr/include/boost/spirit/home/qi.hpp:14,
                 from /usr/include/boost/spirit/include/qi.hpp:16,
                 from /home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:32:
/usr/include/boost/spirit/home/support/attributes.hpp: In instantiation of ‘void boost::spirit::traits::swap_impl(T&, T&) [with T = nihstro::Condition]’:
/usr/include/boost/spirit/home/qi/directive/hold.hpp:64:46:   required from ‘bool boost::spirit::qi::hold_directive<Subject>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; Context = boost::spirit::context<boost::fusion::cons<nihstro::Condition&, boost::fusion::nil_>, boost::fusion::vector0<> >; Skipper = boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >; Attribute = nihstro::Condition; Subject = boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Instruction::FlowControlType::Op(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > >]’
/usr/include/boost/spirit/home/qi/detail/alternative_function.hpp:70:71:   required from ‘bool boost::spirit::qi::detail::alternative_function<Iterator, Context, Skipper, Attribute>::call(const Component&, mpl_::true_) const [with Component = boost::spirit::qi::hold_directive<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Instruction::FlowControlType::Op(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > > >; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; Context = boost::spirit::context<boost::fusion::cons<nihstro::Condition&, boost::fusion::nil_>, boost::fusion::vector0<> >; Skipper = boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >; Attribute = nihstro::Condition; mpl_::true_ = mpl_::bool_<true>]’
/usr/include/boost/spirit/home/qi/detail/alternative_function.hpp:153:20:   required from ‘bool boost::spirit::qi::detail::alternative_function<Iterator, Context, Skipper, Attribute>::call_unused(const Component&, mpl_::true_) const [with Component = boost::spirit::qi::hold_directive<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Instruction::FlowControlType::Op(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > > >; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; Context = boost::spirit::context<boost::fusion::cons<nihstro::Condition&, boost::fusion::nil_>, boost::fusion::vector0<> >; Skipper = boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >; Attribute = nihstro::Condition; mpl_::true_ = mpl_::bool_<true>]’
/usr/include/boost/spirit/home/qi/detail/alternative_function.hpp:170:54:   required from ‘bool boost::spirit::qi::detail::alternative_function<Iterator, Context, Skipper, Attribute>::operator()(const Component&) const [with Component = boost::spirit::qi::hold_directive<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Instruction::FlowControlType::Op(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > > >; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; Context = boost::spirit::context<boost::fusion::cons<nihstro::Condition&, boost::fusion::nil_>, boost::fusion::vector0<> >; Skipper = boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >; Attribute = nihstro::Condition]’
/usr/include/boost/fusion/algorithm/query/detail/any.hpp:40:19:   required from ‘bool boost::fusion::detail::linear_any(const First&, const Last&, F&, mpl_::false_) [with First = boost::fusion::cons_iterator<const boost::fusion::cons<boost::spirit::qi::hold_directive<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Instruction::FlowControlType::Op(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > > >, boost::fusion::cons<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::attr_parser<const nihstro::Instruction::FlowControlType::Op>, boost::fusion::cons<boost::spirit::qi::attr_parser<const nihstro::ConditionInput>, boost::fusion::nil_> > > >, boost::fusion::nil_> > >; Last = boost::fusion::cons_iterator<const boost::fusion::nil_>; F = boost::spirit::qi::detail::alternative_function<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::context<boost::fusion::cons<nihstro::Condition&, boost::fusion::nil_>, boost::fusion::vector0<> >, boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >, nihstro::Condition>; mpl_::false_ = mpl_::bool_<false>]’
/usr/include/boost/fusion/algorithm/query/detail/any.hpp:59:63:   [ skipping 8 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/boost/function/function_template.hpp:1077:16:   required from ‘boost::function<R(T0, T1, T2, T3)>::function(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::alternative<boost::fusion::cons<boost::spirit::qi::hold_directive<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Instruction::FlowControlType::Op(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > > >, boost::fusion::cons<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::attr_parser<const nihstro::Instruction::FlowControlType::Op>, boost::fusion::cons<boost::spirit::qi::attr_parser<const nihstro::ConditionInput>, boost::fusion::nil_> > > >, boost::fusion::nil_> > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<nihstro::Condition&, boost::fusion::nil_>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type = int]’
/usr/include/boost/function/function_template.hpp:1132:5:   required from ‘typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, boost::function<R(T0, T1, T2, T3)>&>::type boost::function<R(T0, T1, T2, T3)>::operator=(Functor) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::alternative<boost::fusion::cons<boost::spirit::qi::hold_directive<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Instruction::FlowControlType::Op(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > > >, boost::fusion::cons<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::attr_parser<const nihstro::Instruction::FlowControlType::Op>, boost::fusion::cons<boost::spirit::qi::attr_parser<const nihstro::ConditionInput>, boost::fusion::nil_> > > >, boost::fusion::nil_> > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<nihstro::Condition&, boost::fusion::nil_>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, boost::function<R(T0, T1, T2, T3)>&>::type = boost::function<bool(__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&, const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&, boost::spirit::context<boost::fusion::cons<nihstro::Condition&, boost::fusion::nil_>, boost::fusion::vector0<> >&, const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&)>&]’
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:183:19:   required from ‘static void boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::define(boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>&, const Expr&, mpl_::true_) [with Auto = mpl_::bool_<false>; Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::bitwise_or, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::hold>, 0l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Instruction::FlowControlType::Op(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&>, 2l>&, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::attr, boost::fusion::vector1<nihstro::Instruction::FlowControlType::Op> > >, 0l>&>, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::attr, boost::fusion::vector1<nihstro::ConditionInput> > >, 0l>&>, 2l>&>, 2l>; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; T1 = nihstro::Condition(); T2 = AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type; mpl_::true_ = mpl_::bool_<true>]’
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:221:19:   required from ‘boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>& boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::operator=(const Expr&) [with Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::bitwise_or, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::subscript, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::hold>, 0l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Instruction::FlowControlType::Op(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&>, 2l>&, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&>, 2l>&>, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::shift_right, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::ConditionInput(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::attr, boost::fusion::vector1<nihstro::Instruction::FlowControlType::Op> > >, 0l>&>, 2l>&, const boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::attr, boost::fusion::vector1<nihstro::ConditionInput> > >, 0l>&>, 2l>&>, 2l>; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; T1 = nihstro::Condition(); T2 = AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type]’
/home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:522:19:   required from ‘FlowControlParser<Iterator>::FlowControlParser(const nihstro::ParserContext&) [with Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >]’
/home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:697:67:   required from here
/usr/include/boost/spirit/home/support/attributes.hpp:1036:18: error: call of overloaded ‘swap(nihstro::Condition&, nihstro::Condition&)’ is ambiguous
         swap(a, b);
                  ^
/usr/include/boost/spirit/home/support/attributes.hpp:1036:18: note: candidates are:
In file included from /usr/include/boost/utility/swap.hpp:15:0,
                 from /usr/include/boost/optional/optional.hpp:54,
                 from /usr/include/boost/optional.hpp:15,
                 from /usr/include/boost/spirit/home/support/container.hpp:21,
                 from /usr/include/boost/spirit/home/support/string_traits.hpp:16,
                 from /usr/include/boost/spirit/home/support/nonterminal/expand_arg.hpp:20,
                 from /usr/include/boost/spirit/home/support/context.hpp:18,
                 from /usr/include/boost/spirit/home/qi/domain.hpp:18,
                 from /usr/include/boost/spirit/home/qi/meta_compiler.hpp:15,
                 from /usr/include/boost/spirit/home/qi/action/action.hpp:14,
                 from /usr/include/boost/spirit/home/qi/action.hpp:14,
                 from /usr/include/boost/spirit/home/qi.hpp:14,
                 from /usr/include/boost/spirit/include/qi.hpp:16,
                 from /home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:32:
/usr/include/boost/core/swap.hpp:54:8: note: void boost::swap(T1&, T2&) [with T1 = nihstro::Condition; T2 = nihstro::Condition]
   void swap(T1& left, T2& right)
        ^
In file included from /usr/include/boost/fusion/sequence/intrinsic.hpp:23:0,
                 from /usr/include/boost/fusion/include/intrinsic.hpp:11,
                 from /usr/include/boost/proto/fusion.hpp:22,
                 from /usr/include/boost/proto/core.hpp:21,
                 from /usr/include/boost/proto/proto.hpp:12,
                 from /usr/include/boost/spirit/home/support/meta_compiler.hpp:19,
                 from /usr/include/boost/spirit/home/qi/meta_compiler.hpp:14,
                 from /usr/include/boost/spirit/home/qi/action/action.hpp:14,
                 from /usr/include/boost/spirit/home/qi/action.hpp:14,
                 from /usr/include/boost/spirit/home/qi.hpp:14,
                 from /usr/include/boost/spirit/include/qi.hpp:16,
                 from /home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:32:
/usr/include/boost/fusion/sequence/intrinsic/swap.hpp:57:5: note: typename boost::fusion::result_of::swap<Seq1, Seq2>::type boost::fusion::swap(Seq1&, Seq2&) [with Seq1 = nihstro::Condition; Seq2 = nihstro::Condition; typename boost::fusion::result_of::swap<Seq1, Seq2>::type = void]
     swap(Seq1& lhs, Seq2& rhs)
     ^
In file included from /usr/include/boost/fusion/container/vector/vector10.hpp:66:0,
                 from /usr/include/boost/fusion/container/vector/vector_fwd.hpp:15,
                 from /usr/include/boost/fusion/mpl/detail/clear.hpp:11,
                 from /usr/include/boost/fusion/mpl/clear.hpp:13,
                 from /usr/include/boost/fusion/mpl.hpp:17,
                 from /usr/include/boost/fusion/view/detail/strictest_traversal.hpp:16,
                 from /usr/include/boost/fusion/view/zip_view/zip_view.hpp:15,
                 from /usr/include/boost/fusion/view/zip_view.hpp:12,
                 from /usr/include/boost/fusion/sequence/intrinsic/swap.hpp:15,
                 from /usr/include/boost/fusion/sequence/intrinsic.hpp:23,
                 from /usr/include/boost/fusion/include/intrinsic.hpp:11,
                 from /usr/include/boost/proto/fusion.hpp:22,
                 from /usr/include/boost/proto/core.hpp:21,
                 from /usr/include/boost/proto/proto.hpp:12,
                 from /usr/include/boost/spirit/home/support/meta_compiler.hpp:19,
                 from /usr/include/boost/spirit/home/qi/meta_compiler.hpp:14,
                 from /usr/include/boost/spirit/home/qi/action/action.hpp:14,
                 from /usr/include/boost/spirit/home/qi/action.hpp:14,
                 from /usr/include/boost/spirit/home/qi.hpp:14,
                 from /usr/include/boost/spirit/include/qi.hpp:16,
                 from /home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:32:
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp: In instantiation of ‘static boost::fusion::vector_data2<T0, T1> boost::fusion::vector_data2<T0, T1>::init_from_sequence(const Sequence&) [with Sequence = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; T0 = boost::optional<int>; T1 = std::basic_string<char>]’:
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:336:58:   required from ‘boost::fusion::vector2<T0, T1>::vector2(const Sequence&, typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type*) [with Sequence = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; T0 = boost::optional<int>; T1 = std::basic_string<char>; typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type = void]’
/usr/include/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp:48:50:   required from ‘constexpr boost::fusion::vector<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::vector(const Sequence&, typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type*) [with Sequence = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; T0 = boost::optional<int>; T1 = std::basic_string<char>; T2 = boost::fusion::void_; T3 = boost::fusion::void_; T4 = boost::fusion::void_; T5 = boost::fusion::void_; T6 = boost::fusion::void_; T7 = boost::fusion::void_; T8 = boost::fusion::void_; T9 = boost::fusion::void_; typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type = void]’
/usr/include/boost/type_traits/is_convertible.hpp:86:31:   required by substitution of ‘template<class From1, class To1> static decltype ((test_aux<To1>(declval<From1>()), boost::detail::is_convertible_basic_impl<From, To, false>::one())) boost::detail::is_convertible_basic_impl<From, To, false>::test(int) [with From1 = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; To1 = boost::fusion::vector<boost::optional<int>, std::basic_string<char> >]’
/usr/include/boost/type_traits/is_convertible.hpp:92:44:   required from ‘const bool boost::detail::is_convertible_basic_impl<boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >, boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, false>::value’
/usr/include/boost/type_traits/is_convertible.hpp:357:5:   required from ‘const bool boost::detail::is_convertible_impl<boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >, boost::fusion::vector<boost::optional<int>, std::basic_string<char> > >::value’
/usr/include/boost/type_traits/is_convertible.hpp:482:1:   [ skipping 21 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/boost/function/function_template.hpp:1077:16:   required from ‘boost::function<R(T0, T1, T2, T3)>::function(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<std::vector<nihstro::Expression>&, boost::fusion::nil_>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type = int]’
/usr/include/boost/function/function_template.hpp:1132:5:   required from ‘typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, boost::function<R(T0, T1, T2, T3)>&>::type boost::function<R(T0, T1, T2, T3)>::operator=(Functor) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<std::vector<nihstro::Expression>&, boost::fusion::nil_>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, boost::function<R(T0, T1, T2, T3)>&>::type = boost::function<bool(__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&, const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&, boost::spirit::context<boost::fusion::cons<std::vector<nihstro::Expression>&, boost::fusion::nil_>, boost::fusion::vector0<> >&, const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&)>&]’
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:183:19:   required from ‘static void boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::define(boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>&, const Expr&, mpl_::true_) [with Auto = mpl_::bool_<false>; Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::lit, boost::fusion::vector1<char> > >, 0l>&>, 2l>&, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&>, 2l>; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; T1 = std::vector<nihstro::Expression>(); T2 = AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type; mpl_::true_ = mpl_::bool_<true>]’
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:221:19:   required from ‘boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>& boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::operator=(const Expr&) [with Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::lit, boost::fusion::vector1<char> > >, 0l>&>, 2l>&, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&>, 2l>; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; T1 = std::vector<nihstro::Expression>(); T2 = AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type]’
/home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:448:25:   required from ‘CompareParser<Iterator>::CompareParser(const nihstro::ParserContext&) [with Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >]’
/home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:697:67:   required from here
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:251:42: error: no matching function for call to ‘boost::fusion::vector_data2<boost::optional<int>, std::basic_string<char> >::vector_data2(const boost::fusion::vector<boost::optional<int>, std::basic_string<char> >&, const boost::optional<nihstro::IndexExpression>&)’
             return vector_data2(*i0 , *i1);
                                          ^
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:251:42: note: candidates are:
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:230:9: note: constexpr boost::fusion::vector_data2<T0, T1>::vector_data2(const boost::fusion::vector_data2<T0, T1>&) [with T0 = boost::optional<int>; T1 = std::basic_string<char>]
         vector_data2(
         ^
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:230:9: note:   candidate expects 1 argument, 2 provided
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:226:9: note: constexpr boost::fusion::vector_data2<T0, T1>::vector_data2(typename boost::fusion::detail::call_param<T>::type, typename boost::fusion::detail::call_param<Cdr>::type) [with T0 = boost::optional<int>; T1 = std::basic_string<char>; typename boost::fusion::detail::call_param<T>::type = const boost::optional<int>&; typename boost::fusion::detail::call_param<Cdr>::type = const std::basic_string<char>&]
         vector_data2(
         ^
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:226:9: note:   no known conversion for argument 1 from ‘const boost::fusion::vector<boost::optional<int>, std::basic_string<char> >’ to ‘boost::fusion::detail::call_param<boost::optional<int> >::type {aka const boost::optional<int>&}’
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:218:9: note: boost::fusion::vector_data2<T0, T1>::vector_data2(boost::fusion::vector_data2<T0, T1>&&) [with T0 = boost::optional<int>; T1 = std::basic_string<char>]
         vector_data2(
         ^
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:218:9: note:   candidate expects 1 argument, 2 provided
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:213:9: note: template<class U0, class U1> boost::fusion::vector_data2<T0, T1>::vector_data2(U0&&, U1&&, typename boost::enable_if<boost::is_convertible<Sequence, Car> >::type*)
         vector_data2(U0 && arg0 , U1 && arg1
         ^
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:213:9: note:   template argument deduction/substitution failed:
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp: In substitution of ‘template<class U0, class U1> boost::fusion::vector_data2<T0, T1>::vector_data2(U0&&, U1&&, typename boost::enable_if<boost::is_convertible<Sequence, Car> >::type*) [with U0 = const boost::fusion::vector<boost::optional<int>, std::basic_string<char> >&; U1 = const boost::optional<nihstro::IndexExpression>&]’:
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:251:42:   required from ‘static boost::fusion::vector_data2<T0, T1> boost::fusion::vector_data2<T0, T1>::init_from_sequence(const Sequence&) [with Sequence = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; T0 = boost::optional<int>; T1 = std::basic_string<char>]’
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:336:58:   required from ‘boost::fusion::vector2<T0, T1>::vector2(const Sequence&, typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type*) [with Sequence = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; T0 = boost::optional<int>; T1 = std::basic_string<char>; typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type = void]’
/usr/include/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp:48:50:   required from ‘constexpr boost::fusion::vector<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::vector(const Sequence&, typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type*) [with Sequence = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; T0 = boost::optional<int>; T1 = std::basic_string<char>; T2 = boost::fusion::void_; T3 = boost::fusion::void_; T4 = boost::fusion::void_; T5 = boost::fusion::void_; T6 = boost::fusion::void_; T7 = boost::fusion::void_; T8 = boost::fusion::void_; T9 = boost::fusion::void_; typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type = void]’
/usr/include/boost/type_traits/is_convertible.hpp:86:31:   required by substitution of ‘template<class From1, class To1> static decltype ((test_aux<To1>(declval<From1>()), boost::detail::is_convertible_basic_impl<From, To, false>::one())) boost::detail::is_convertible_basic_impl<From, To, false>::test(int) [with From1 = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; To1 = boost::fusion::vector<boost::optional<int>, std::basic_string<char> >]’
/usr/include/boost/type_traits/is_convertible.hpp:92:44:   required from ‘const bool boost::detail::is_convertible_basic_impl<boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >, boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, false>::value’
/usr/include/boost/type_traits/is_convertible.hpp:357:5:   [ skipping 22 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/boost/function/function_template.hpp:1077:16:   required from ‘boost::function<R(T0, T1, T2, T3)>::function(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<std::vector<nihstro::Expression>&, boost::fusion::nil_>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type = int]’
/usr/include/boost/function/function_template.hpp:1132:5:   required from ‘typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, boost::function<R(T0, T1, T2, T3)>&>::type boost::function<R(T0, T1, T2, T3)>::operator=(Functor) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<std::vector<nihstro::Expression>&, boost::fusion::nil_>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, boost::function<R(T0, T1, T2, T3)>&>::type = boost::function<bool(__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&, const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&, boost::spirit::context<boost::fusion::cons<std::vector<nihstro::Expression>&, boost::fusion::nil_>, boost::fusion::vector0<> >&, const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&)>&]’
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:183:19:   required from ‘static void boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::define(boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>&, const Expr&, mpl_::true_) [with Auto = mpl_::bool_<false>; Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::lit, boost::fusion::vector1<char> > >, 0l>&>, 2l>&, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&>, 2l>; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; T1 = std::vector<nihstro::Expression>(); T2 = AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type; mpl_::true_ = mpl_::bool_<true>]’
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:221:19:   required from ‘boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>& boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::operator=(const Expr&) [with Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::lit, boost::fusion::vector1<char> > >, 0l>&>, 2l>&, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&>, 2l>; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; T1 = std::vector<nihstro::Expression>(); T2 = AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type]’
/home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:448:25:   required from ‘CompareParser<Iterator>::CompareParser(const nihstro::ParserContext&) [with Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >]’
/home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:697:67:   required from here
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:213:9: error: no type named ‘type’ in ‘struct boost::enable_if<boost::is_convertible<const boost::fusion::vector<boost::optional<int>, std::basic_string<char> >&, boost::optional<int> >, void>’
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp: In instantiation of ‘static boost::fusion::vector_data2<T0, T1> boost::fusion::vector_data2<T0, T1>::init_from_sequence(const Sequence&) [with Sequence = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; T0 = boost::optional<int>; T1 = std::basic_string<char>]’:
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:336:58:   required from ‘boost::fusion::vector2<T0, T1>::vector2(const Sequence&, typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type*) [with Sequence = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; T0 = boost::optional<int>; T1 = std::basic_string<char>; typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type = void]’
/usr/include/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp:48:50:   required from ‘constexpr boost::fusion::vector<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::vector(const Sequence&, typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type*) [with Sequence = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; T0 = boost::optional<int>; T1 = std::basic_string<char>; T2 = boost::fusion::void_; T3 = boost::fusion::void_; T4 = boost::fusion::void_; T5 = boost::fusion::void_; T6 = boost::fusion::void_; T7 = boost::fusion::void_; T8 = boost::fusion::void_; T9 = boost::fusion::void_; typename boost::enable_if<boost::fusion::traits::is_sequence<Sequence> >::type = void]’
/usr/include/boost/type_traits/is_convertible.hpp:86:31:   required by substitution of ‘template<class From1, class To1> static decltype ((test_aux<To1>(declval<From1>()), boost::detail::is_convertible_basic_impl<From, To, false>::one())) boost::detail::is_convertible_basic_impl<From, To, false>::test(int) [with From1 = boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >; To1 = boost::fusion::vector<boost::optional<int>, std::basic_string<char> >]’
/usr/include/boost/type_traits/is_convertible.hpp:92:44:   required from ‘const bool boost::detail::is_convertible_basic_impl<boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >, boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, false>::value’
/usr/include/boost/type_traits/is_convertible.hpp:357:5:   required from ‘const bool boost::detail::is_convertible_impl<boost::fusion::vector3<boost::fusion::vector<boost::optional<int>, std::basic_string<char> >, boost::optional<nihstro::IndexExpression>, std::vector<nihstro::InputSwizzlerMask> >, boost::fusion::vector<boost::optional<int>, std::basic_string<char> > >::value’
/usr/include/boost/type_traits/is_convertible.hpp:482:1:   [ skipping 21 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/boost/function/function_template.hpp:1077:16:   required from ‘boost::function<R(T0, T1, T2, T3)>::function(Functor, typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<std::vector<nihstro::Expression>&, boost::fusion::nil_>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, int>::type = int]’
/usr/include/boost/function/function_template.hpp:1132:5:   required from ‘typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, boost::function<R(T0, T1, T2, T3)>&>::type boost::function<R(T0, T1, T2, T3)>::operator=(Functor) [with Functor = boost::spirit::qi::detail::parser_binder<boost::spirit::qi::expect<boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type> >, boost::fusion::nil_> > > >, mpl_::bool_<false> >; R = bool; T0 = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T1 = const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&; T2 = boost::spirit::context<boost::fusion::cons<std::vector<nihstro::Expression>&, boost::fusion::nil_>, boost::fusion::vector0<> >&; T3 = const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&; typename boost::enable_if_c<boost::type_traits::ice_not<boost::is_integral<Functor>::value>::value, boost::function<R(T0, T1, T2, T3)>&>::type = boost::function<bool(__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&, const __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >&, boost::spirit::context<boost::fusion::cons<std::vector<nihstro::Expression>&, boost::fusion::nil_>, boost::fusion::vector0<> >&, const boost::spirit::qi::reference<const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type> >&)>&]’
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:183:19:   required from ‘static void boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::define(boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>&, const Expr&, mpl_::true_) [with Auto = mpl_::bool_<false>; Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::lit, boost::fusion::vector1<char> > >, 0l>&>, 2l>&, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&>, 2l>; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; T1 = std::vector<nihstro::Expression>(); T2 = AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type; mpl_::true_ = mpl_::bool_<true>]’
/usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:221:19:   required from ‘boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>& boost::spirit::qi::rule<Iterator, T1, T2, T3, T4>::operator=(const Expr&) [with Expr = boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<const boost::proto::exprns_::expr<boost::proto::tagns_::tag::greater, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::terminal_ex<boost::spirit::tag::lit, boost::fusion::vector1<char> > >, 0l>&>, 2l>&, boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >, nihstro::Expression(), AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >, boost::spirit::unused_type, boost::spirit::unused_type>&>, 2l>; Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; T1 = std::vector<nihstro::Expression>(); T2 = AssemblySkipper<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >; T3 = boost::spirit::unused_type; T4 = boost::spirit::unused_type]’
/home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:448:25:   required from ‘CompareParser<Iterator>::CompareParser(const nihstro::ParserContext&) [with Iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >]’
/home/thomas/dev/3ds/nihstro/src/parser_assembly.cpp:697:67:   required from here
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:205:9: note: constexpr boost::fusion::vector_data2<T0, T1>::vector_data2() [with T0 = boost::optional<int>; T1 = std::basic_string<char>]
         vector_data2()
         ^
/usr/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp:205:9: note:   candidate expects 0 arguments, 2 provided
make[2]: *** [CMakeFiles/nihstro-assemble.dir/src/parser_assembly.cpp.o] Error 1
make[1]: *** [CMakeFiles/nihstro-assemble.dir/all] Error 2
make: *** [all] Error 2
@neobrain
Copy link
Owner

Hey,

Sorry for the late reply, and thanks for the report! I've installed boost 1.58 locally and was able to reproduce the issue. I'll look into what's causing it.

@neobrain
Copy link
Owner

Not exactly sure what's happening, but I suppose boost doesn't like that I'm inheriting from boost::fusion::vector. I fixed this by using BOOST_FUSION_ADAPT_STRUCT instead, which I was going to do eventually anyway. A fix for the issue should land in the repo soon enough, hence.

@neobrain
Copy link
Owner

Fixed in 4dee06c .

Thanks again for the report!

@Cruel
Copy link
Contributor Author

Cruel commented May 23, 2015

You're welcome. The fixed worked well for me too, good work. Now I'm off to play with the inline assembler. 😈

@neobrain
Copy link
Owner

Heh, didn't know people would actually use the inline assembler. Mind you, you don't actually need to compile anything for that, since you can just include the inline_assembler header in your project ;)

That said, I'm not sure if I'll keep working on the inline assembler any further. Most future focus will probably go towards the standalone assembler.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants