Fwd: Attribute collapsing error

Kamil Witecki <[email protected]> Thu, 18 Oct 2018 15:11:12 +0200
Newsgroups gmane.comp.parsers.spirit.general
Message-ID <CAK=ju-uaVbPD0Lmm2raanHBbGQx238-uvfi=RgqnOze3xOeYNQ@mail.gmail.com>
Hello,
I have encountered strange issues with X3 attribute rules. When working
with alternative with unused_type and attribute Spirit cannot push
attribute to optional.

I am using Boost 1.65.1 (with clang) and 1.68.0 (with MSVC Express 2017
15.8.4) and its Spirit.X3 implementation.

Is it an error in Spirit.X3 or I have misunderstood compound attribute
rules? How to fix the grammar if the latter is true?

Attached is minimal example reproducing the case, error log of MSVC and
error log of clang. Uncommenting the noop semantic actions makes the
example compile.

Pozdrawiam,
Kamil Witecki.

_______________________________________________
Spirit-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spirit-general
x3_bug.cpp (text/x-c-code, 798 B)
#include <boost/fusion/adapted/std_pair.hpp>
#include <boost/spirit/home/x3.hpp>
#include <iostream>
#include <cassert>
#include <vector>
#include <string>

namespace
{
    using boost::spirit::x3::rule;
    using boost::spirit::x3::lit;
    using boost::spirit::x3::int_;
    using boost::spirit::x3::space;
    using boost::spirit::x3::graph;
    namespace bug
    {
        auto rule_ = rule<class node_, boost::optional<
            boost::fusion::deque<
                std::string, int
            >
            >
        >{ "a" } =
            ((*graph >> int_) | lit('a')/*[([]() {})]*/);
    }
}

int main()
{
    char data[1];
    boost::optional<boost::fusion::deque<std::string, int>> res;
    boost::spirit::x3::phrase_parse(std::begin(data), std::end(data), bug::rule_, space, res);
}
clang_err.log (application/octet-stream, 34.2 KB)
In file included from /mnt/c/home/projects/pdl_app/x3_bug.cpp:2:
In file included from /usr/include/boost/spirit/home/x3.hpp:14:
In file included from /usr/include/boost/spirit/home/x3/auxiliary.hpp:11:
In file included from /usr/include/boost/spirit/home/x3/auxiliary/any_parser.hpp:17:
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:180:9: error: no matching function for call to 'move_to'
        detail::move_to(std::move(src), dest
        ^~~~~~~~~~~~~~~
/usr/include/boost/spirit/home/x3/char/char_parser.hpp:31:29: note: in instantiation of function template specialization 'boost::spirit::x3::traits::move_to<char &, boost::fusion::deque<std::__cxx11::basic_string<char>, int> >' requested here
                x3::traits::move_to(*first, attr);
                            ^
/usr/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp:101:25: note: in instantiation of function template specialization 'boost::spirit::x3::char_parser<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >::parse<char *, boost::spirit::x3::context<(anonymous namespace)::bug::node_, const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >, boost::fusion::deque<std::__cxx11::basic_string<char>, int> >' requested here
            if (!parser.parse(first, last, context, rcontext, val))
                        ^
/usr/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp:132:20: note: in instantiation of function template specialization 'boost::spirit::x3::detail::parse_into_container_base_impl<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >::call_synthesize_x<char *, boost::spirit::x3::context<(anonymous namespace)::bug::node_, const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
            return call_synthesize_x(parser, first, last, context, rcontext, attr
                   ^
/usr/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp:187:20: note: in instantiation of function template specialization 'boost::spirit::x3::detail::parse_into_container_base_impl<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >::call_synthesize<char *, boost::spirit::x3::context<(anonymous namespace)::bug::node_, const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
            return call_synthesize(parser, first, last, context, rcontext, attr);
                   ^
/usr/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp:196:20: note: in instantiation of function template specialization 'boost::spirit::x3::detail::parse_into_container_base_impl<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >::call_synthesize_dispatch_by_seq<char *, boost::spirit::x3::context<(anonymous namespace)::bug::node_, const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
            return call_synthesize_dispatch_by_seq(parser, first, last, context, rcontext, attr
                   ^
/usr/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp:218:20: note: (skipping 11 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
            return call(parser, first, last, context, rcontext, attr
                   ^
/usr/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:334:28: note: in instantiation of function template specialization 'boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, (anonymous namespace)::bug::node_>::parse_rhs<boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, char *, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
                ok_parse = parse_rhs(rhs, first, last, context, attr_, attr_
                           ^
/usr/include/boost/spirit/home/x3/nonterminal/rule.hpp:61:19: note: in instantiation of function template specialization 'boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, (anonymous namespace)::bug::node_>::call_rule_definition<boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, char *, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, mpl_::bool_<false> >' requested here
                ::call_rule_definition(
                  ^
/usr/include/boost/spirit/home/x3/core/parse.hpp:117:31: note: in instantiation of function template specialization 'boost::spirit::x3::rule_definition<(anonymous namespace)::bug::node_, boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, false>::parse<char *, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
        bool r = as_parser(p).parse(first, last, skipper_ctx, unused, attr);
                              ^
/usr/include/boost/spirit/home/x3/core/parse.hpp:149:16: note: in instantiation of function template specialization 'boost::spirit::x3::phrase_parse_main<char *, boost::spirit::x3::rule_definition<(anonymous namespace)::bug::node_, boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, false>, boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
        return phrase_parse_main(first, last, p, s, attr, post_skip);
               ^
/mnt/c/home/projects/pdl_app/x3_bug.cpp:31:24: note: in instantiation of function template specialization 'boost::spirit::x3::phrase_parse<char *, boost::spirit::x3::rule_definition<(anonymous namespace)::bug::node_, boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, false>, boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
    boost::spirit::x3::phrase_parse(std::begin(data), std::end(data), bug::rule_, space, res);
                       ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:56:9: note: candidate function not viable: no known conversion from 'typename attribute_category<deque<basic_string<char>, int> >::type' (aka 'boost::spirit::x3::traits::tuple_attribute') to 'boost::spirit::x3::traits::unused_attribute' for 3rd argument
        move_to(Source&&, Dest&, unused_attribute) {}
        ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:74:9: note: candidate function not viable: no known conversion from 'typename attribute_category<deque<basic_string<char>, int> >::type' (aka 'boost::spirit::x3::traits::tuple_attribute') to 'boost::spirit::x3::traits::plain_attribute' for 3rd argument
        move_to(Source&& src, Dest& dest, plain_attribute)
        ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:86:9: note: candidate function not viable: no known conversion from 'typename attribute_category<deque<basic_string<char>, int> >::type' (aka 'boost::spirit::x3::traits::tuple_attribute') to 'boost::spirit::x3::traits::container_attribute' for 3rd argument
        move_to(Source&& src, Dest& dest, container_attribute)
        ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:150:9: note: candidate function not viable: no known conversion from 'typename attribute_category<deque<basic_string<char>, int> >::type' (aka 'boost::spirit::x3::traits::tuple_attribute') to 'boost::spirit::x3::traits::variant_attribute' for 3rd argument
        move_to(Source&& src, Dest& dest, variant_attribute tag)
        ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:93:13: note: candidate template ignored: disabled by 'enable_if' [with Source = char, Dest = boost::fusion::deque<std::__cxx11::basic_string<char>, int>]
            mpl::and_<
            ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:104:13: note: candidate template ignored: disabled by 'enable_if' [with Source = char, Dest = boost::fusion::deque<std::__cxx11::basic_string<char>, int>]
            is_size_one_sequence<Dest>
            ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:113:9: note: candidate function template not viable: requires 4 arguments, but 3 were provided
        move_to(Source&& src, Dest& dest, variant_attribute, mpl::false_)
        ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:143:9: note: candidate function template not viable: requires 4 arguments, but 3 were provided
        move_to(Source&& src, Dest& dest, variant_attribute, mpl::true_)
        ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:157:9: note: candidate function template not viable: requires 4 arguments, but 3 were provided
        move_to(Iterator, Iterator, unused_type, unused_attribute) {}
        ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:161:9: note: candidate function template not viable: requires 4 arguments, but 3 were provided
        move_to(Iterator first, Iterator last, Dest& dest, container_attribute)
        ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:171:9: note: candidate function template not viable: requires 4 arguments, but 3 were provided
        move_to(Iterator first, Iterator last, boost::iterator_range<Iterator>& rng, container_attribute)
        ^
In file included from /mnt/c/home/projects/pdl_app/x3_bug.cpp:2:
In file included from /usr/include/boost/spirit/home/x3.hpp:14:
In file included from /usr/include/boost/spirit/home/x3/auxiliary.hpp:11:
In file included from /usr/include/boost/spirit/home/x3/auxiliary/any_parser.hpp:15:
/usr/include/boost/spirit/home/x3/support/traits/container_traits.hpp:125:15: error: no member named 'insert' in 'boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >'
            c.insert(c.end(), std::move(val));
            ~ ^
/usr/include/boost/spirit/home/x3/support/traits/container_traits.hpp:133:48: note: in instantiation of function template specialization 'boost::spirit::x3::traits::push_back_container<boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, void>::call<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >' requested here
        return push_back_container<Container>::call(c, std::move(val));
                                               ^
/usr/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp:105:21: note: in instantiation of function template specialization 'boost::spirit::x3::traits::push_back<boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, boost::fusion::deque<std::__cxx11::basic_string<char>, int> &>' requested here
            traits::push_back(attr, val);
                    ^
/usr/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp:132:20: note: in instantiation of function template specialization 'boost::spirit::x3::detail::parse_into_container_base_impl<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >::call_synthesize_x<char *, boost::spirit::x3::context<(anonymous namespace)::bug::node_, const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
            return call_synthesize_x(parser, first, last, context, rcontext, attr
                   ^
/usr/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp:187:20: note: in instantiation of function template specialization 'boost::spirit::x3::detail::parse_into_container_base_impl<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >::call_synthesize<char *, boost::spirit::x3::context<(anonymous namespace)::bug::node_, const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
            return call_synthesize(parser, first, last, context, rcontext, attr);
                   ^
/usr/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp:196:20: note: in instantiation of function template specialization 'boost::spirit::x3::detail::parse_into_container_base_impl<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >::call_synthesize_dispatch_by_seq<char *, boost::spirit::x3::context<(anonymous namespace)::bug::node_, const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
            return call_synthesize_dispatch_by_seq(parser, first, last, context, rcontext, attr
                   ^
/usr/include/boost/spirit/home/x3/core/detail/parse_into_container.hpp:218:20: note: (skipping 11 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
            return call(parser, first, last, context, rcontext, attr
                   ^
/usr/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:334:28: note: in instantiation of function template specialization 'boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, (anonymous namespace)::bug::node_>::parse_rhs<boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, char *, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
                ok_parse = parse_rhs(rhs, first, last, context, attr_, attr_
                           ^
/usr/include/boost/spirit/home/x3/nonterminal/rule.hpp:61:19: note: in instantiation of function template specialization 'boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, (anonymous namespace)::bug::node_>::call_rule_definition<boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, char *, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, mpl_::bool_<false> >' requested here
                ::call_rule_definition(
                  ^
/usr/include/boost/spirit/home/x3/core/parse.hpp:117:31: note: in instantiation of function template specialization 'boost::spirit::x3::rule_definition<(anonymous namespace)::bug::node_, boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, false>::parse<char *, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
        bool r = as_parser(p).parse(first, last, skipper_ctx, unused, attr);
                              ^
/usr/include/boost/spirit/home/x3/core/parse.hpp:149:16: note: in instantiation of function template specialization 'boost::spirit::x3::phrase_parse_main<char *, boost::spirit::x3::rule_definition<(anonymous namespace)::bug::node_, boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, false>, boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
        return phrase_parse_main(first, last, p, s, attr, post_skip);
               ^
/mnt/c/home/projects/pdl_app/x3_bug.cpp:31:24: note: in instantiation of function template specialization 'boost::spirit::x3::phrase_parse<char *, boost::spirit::x3::rule_definition<(anonymous namespace)::bug::node_, boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, false>, boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
    boost::spirit::x3::phrase_parse(std::begin(data), std::end(data), bug::rule_, space, res);
                       ^
In file included from /mnt/c/home/projects/pdl_app/x3_bug.cpp:2:
In file included from /usr/include/boost/spirit/home/x3.hpp:14:
In file included from /usr/include/boost/spirit/home/x3/auxiliary.hpp:11:
In file included from /usr/include/boost/spirit/home/x3/auxiliary/any_parser.hpp:17:
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:62:18: error: no viable overloaded '='
            dest = std::move(src);
            ~~~~ ^ ~~~~~~~~~~~~~~
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:81:13: note: in instantiation of function template specialization 'boost::spirit::x3::traits::detail::move_to_plain<int, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
            move_to_plain(std::forward<Source>(src), dest, is_single_element_sequence);
            ^
/usr/include/boost/spirit/home/x3/support/traits/move_to.hpp:180:17: note: in instantiation of function template specialization 'boost::spirit::x3::traits::detail::move_to<int, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
        detail::move_to(std::move(src), dest
                ^
/usr/include/boost/spirit/home/x3/support/numeric_utils/extract_int.hpp:135:25: note: in instantiation of function template specialization 'boost::spirit::x3::traits::move_to<int &, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
                traits::move_to(attr, attr_);
                        ^
/usr/include/boost/spirit/home/x3/numeric/int.hpp:39:29: note: in instantiation of function template specialization 'boost::spirit::x3::extract_int<int, 10, 1, -1>::call<char *, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
            return extract::call(first, last, attr);
                            ^
/usr/include/boost/spirit/home/x3/operator/detail/sequence.hpp:336:29: note: in instantiation of function template specialization 'boost::spirit::x3::int_parser<int, 10, 1, -1>::parse<char *, boost::spirit::x3::context<(anonymous namespace)::bug::node_, const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
            && parser.right.parse(first, last, context, rcontext, r_attr))
                            ^
/usr/include/boost/spirit/home/x3/operator/detail/sequence.hpp:349:16: note: (skipping 7 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
        return parse_sequence_plain(parser, first, last, context, rcontext, attr);
               ^
/usr/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:334:28: note: in instantiation of function template specialization 'boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, (anonymous namespace)::bug::node_>::parse_rhs<boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, char *, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
                ok_parse = parse_rhs(rhs, first, last, context, attr_, attr_
                           ^
/usr/include/boost/spirit/home/x3/nonterminal/rule.hpp:61:19: note: in instantiation of function template specialization 'boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, (anonymous namespace)::bug::node_>::call_rule_definition<boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, char *, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, mpl_::bool_<false> >' requested here
                ::call_rule_definition(
                  ^
/usr/include/boost/spirit/home/x3/core/parse.hpp:117:31: note: in instantiation of function template specialization 'boost::spirit::x3::rule_definition<(anonymous namespace)::bug::node_, boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, false>::parse<char *, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
        bool r = as_parser(p).parse(first, last, skipper_ctx, unused, attr);
                              ^
/usr/include/boost/spirit/home/x3/core/parse.hpp:149:16: note: in instantiation of function template specialization 'boost::spirit::x3::phrase_parse_main<char *, boost::spirit::x3::rule_definition<(anonymous namespace)::bug::node_, boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, false>, boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
        return phrase_parse_main(first, last, p, s, attr, post_skip);
               ^
/mnt/c/home/projects/pdl_app/x3_bug.cpp:31:24: note: in instantiation of function template specialization 'boost::spirit::x3::phrase_parse<char *, boost::spirit::x3::rule_definition<(anonymous namespace)::bug::node_, boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::graph_tag> >, boost::spirit::x3::int_parser<int, 10, 1, -1> >, boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard, boost::spirit::x3::unused_type> >, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >, false>, boost::spirit::x3::char_class<boost::spirit::char_encoding::standard, boost::spirit::x3::space_tag>, boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> > >' requested here
    boost::spirit::x3::phrase_parse(std::begin(data), std::end(data), bug::rule_, space, res);
                       ^
/usr/include/boost/optional/optional.hpp:943:15: note: candidate function not viable: no known conversion from 'typename std::remove_reference<int &>::type' (aka 'int') to 'const boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >' for 1st argument
    optional& operator= ( optional const& rhs )
              ^
/usr/include/boost/optional/optional.hpp:951:15: note: candidate function not viable: no known conversion from 'typename std::remove_reference<int &>::type' (aka 'int') to 'boost::optional<boost::fusion::deque<std::__cxx11::basic_string<char>, int> >' for 1st argument
    optional& operator= ( optional && rhs ) 
              ^
/usr/include/boost/optional/optional.hpp:994:15: note: candidate function not viable: no known conversion from 'typename std::remove_reference<int &>::type' (aka 'int') to 'boost::none_t' for 1st argument
    optional& operator= ( none_t none_ ) BOOST_NOEXCEPT
              ^
/usr/include/boost/optional/optional.hpp:901:45: note: candidate template ignored: disabled by 'enable_if' [with Expr = int]
    BOOST_DEDUCED_TYPENAME boost::enable_if<optional_detail::is_optional_val_init_candidate<T, Expr>, optional&>::type 
                                            ^
/usr/include/boost/optional/optional.hpp:922:15: note: candidate template ignored: could not match 'optional<type-parameter-0-0>' against 'int'
    optional& operator= ( optional<U> const& rhs )
              ^
/usr/include/boost/optional/optional.hpp:933:15: note: candidate template ignored: could not match 'optional<type-parameter-0-0>' against 'int'
    optional& operator= ( optional<U> && rhs )
              ^
/usr/include/boost/optional/optional.hpp:963:45: note: candidate template ignored: disabled by 'enable_if' [with T_ = int]
    BOOST_DEDUCED_TYPENAME boost::enable_if<boost::is_same<T, BOOST_DEDUCED_TYPENAME boost::decay<T_>::type>, optional&>::type
                                            ^
3 errors generated.
make[3]: *** [CMakeFiles/x3_bug.dir/x3_bug.cpp.o] Error 1
make[2]: *** [CMakeFiles/x3_bug.dir/all] Error 2
make[1]: *** [CMakeFiles/x3_bug.dir/rule] Error 2
make: *** [x3_bug] Error 2
msvc_err.log (application/octet-stream, 28.4 KB)
x3_bug.cpp
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/support/traits/move_to.hpp(158): error C2679: binary '=': no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
c:\home\lib\boost_1_68_0\boost/optional/optional.hpp(1088): note: could be 'boost::optional<boost::fusion::deque<std::string,int>> &boost::optional<boost::fusion::deque<std::string,int>>::operator =(boost::none_t) noexcept'
c:\home\lib\boost_1_68_0\boost/optional/optional.hpp(1041): note: or       'boost::optional<boost::fusion::deque<std::string,int>> &boost::optional<boost::fusion::deque<std::string,int>>::operator =(boost::optional<boost::fusion::deque<std::string,int>> &&) noexcept(false)'
c:\home\lib\boost_1_68_0\boost/optional/optional.hpp(1029): note: or       'boost::optional<boost::fusion::deque<std::string,int>> &boost::optional<boost::fusion::deque<std::string,int>>::operator =(const boost::optional<boost::fusion::deque<std::string,int>> &)'
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/support/traits/move_to.hpp(158): note: while trying to match the argument list '(Dest, int)'
        with
        [
            Dest=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/support/traits/move_to.hpp(196): note: see reference to function template instantiation 'void boost::spirit::x3::traits::detail::move_to<int,Dest>(Source &&,Dest &,boost::spirit::x3::traits::optional_attribute)' being compiled
        with
        [
            Dest=boost::optional<boost::fusion::deque<std::string,int>>,
            Source=int
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/support/numeric_utils/extract_int.hpp(134): note: see reference to function template instantiation 'void boost::spirit::x3::traits::move_to<T&,Attribute>(Source,Dest &)' being compiled
        with
        [
            T=int,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>,
            Source=int &,
            Dest=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/numeric/int.hpp(39): note: see reference to function template instantiation 'bool boost::spirit::x3::extract_int<T,10,1,-1>::call<Iterator,Attribute>(Iterator &,const Iterator &,Attribute &)' being compiled
        with
        [
            T=int,
            Iterator=char *,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/numeric/int.hpp(39): note: see reference to function template instantiation 'bool boost::spirit::x3::extract_int<T,10,1,-1>::call<Iterator,Attribute>(Iterator &,const Iterator &,Attribute &)' being compiled
        with
        [
            T=int,
            Iterator=char *,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/operator/detail/sequence.hpp(346): note: see reference to function template instantiation 'bool boost::spirit::x3::int_parser<int,10,1,-1>::parse<Iterator,Context,ActualAttribute>(Iterator &,const Iterator &,const Context &,boost::spirit::x3::unused_type,Attribute &) const' being compiled
        with
        [
            Iterator=char *,
            Context=boost::spirit::x3::context<`anonymous-namespace'::bug::node_,const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/operator/detail/sequence.hpp(345): note: see reference to function template instantiation 'bool boost::spirit::x3::int_parser<int,10,1,-1>::parse<Iterator,Context,ActualAttribute>(Iterator &,const Iterator &,const Context &,boost::spirit::x3::unused_type,Attribute &) const' being compiled
        with
        [
            Iterator=char *,
            Context=boost::spirit::x3::context<`anonymous-namespace'::bug::node_,const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/operator/detail/sequence.hpp(379): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::parse_sequence_plain<Parser,Iterator,Context,RContext,Attribute>(const Parser &,Iterator &,const Iterator &,const Context &,RContext &,Attribute &)' being compiled
        with
        [
            Parser=boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,
            Iterator=char *,
            Context=boost::spirit::x3::context<`anonymous-namespace'::bug::node_,const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/operator/sequence.hpp(45): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::parse_sequence<boost::spirit::x3::sequence<Derived,boost::spirit::x3::int_parser<int,10,1,-1>>,Iterator,Context,RContext,Attribute>(const Parser &,Iterator &,const Iterator &,const Context &,RContext &,Attribute &,boost::spirit::x3::traits::optional_attribute)' being compiled
        with
        [
            Derived=boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,
            Iterator=char *,
            Context=boost::spirit::x3::context<`anonymous-namespace'::bug::node_,const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>,
            Parser=boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/operator/detail/alternative.hpp(250): note: see reference to function template instantiation 'bool boost::spirit::x3::sequence<Derived,boost::spirit::x3::int_parser<int,10,1,-1>>::parse<Iterator,Context,RContext,Attribute>(Iterator &,const Iterator &,const Context &,RContext &,Attribute &) const' being compiled
        with
        [
            Derived=boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,
            Iterator=char *,
            Context=boost::spirit::x3::context<`anonymous-namespace'::bug::node_,const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/operator/detail/alternative.hpp(250): note: see reference to function template instantiation 'bool boost::spirit::x3::sequence<Derived,boost::spirit::x3::int_parser<int,10,1,-1>>::parse<Iterator,Context,RContext,Attribute>(Iterator &,const Iterator &,const Context &,RContext &,Attribute &) const' being compiled
        with
        [
            Derived=boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,
            Iterator=char *,
            Context=boost::spirit::x3::context<`anonymous-namespace'::bug::node_,const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/operator/alternative.hpp(39): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::parse_alternative<Left,Iterator,Context,RContext,Attribute>(const Parser &,Iterator &,const Iterator &,const Context &,RContext &,Attribute &)' being compiled
        with
        [
            Left=boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,
            Iterator=char *,
            Context=boost::spirit::x3::context<`anonymous-namespace'::bug::node_,const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>,
            Parser=boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/nonterminal/detail/rule.hpp(213): note: see reference to function template instantiation 'bool boost::spirit::x3::alternative<Derived,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>::parse<Iterator,boost::spirit::x3::context<ID,T,Next>,RContext,ActualAttribute>(Iterator &,const Iterator &,const Context &,RContext &,Attribute &) const' being compiled
        with
        [
            Derived=boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,
            Iterator=char *,
            ID=`anonymous-namespace'::bug::node_,
            T=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Next=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>,
            Context=boost::spirit::x3::context<`anonymous-namespace'::bug::node_,const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/nonterminal/detail/rule.hpp(207): note: see reference to function template instantiation 'bool boost::spirit::x3::alternative<Derived,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>::parse<Iterator,boost::spirit::x3::context<ID,T,Next>,RContext,ActualAttribute>(Iterator &,const Iterator &,const Context &,RContext &,Attribute &) const' being compiled
        with
        [
            Derived=boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,
            Iterator=char *,
            ID=`anonymous-namespace'::bug::node_,
            T=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Next=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>,
            Context=boost::spirit::x3::context<`anonymous-namespace'::bug::node_,const boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/nonterminal/detail/rule.hpp(270): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::string,int>>,ID>::parse_rhs_main<RHS,Iterator,Context,RContext,ActualAttribute>(const RHS &,Iterator &,const Iterator &,const Context &,RContext &,ActualAttribute &,boost::mpl::false_)' being compiled
        with
        [
            ID=`anonymous-namespace'::bug::node_,
            RHS=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Iterator=char *,
            Context=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/nonterminal/detail/rule.hpp(267): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::string,int>>,ID>::parse_rhs_main<RHS,Iterator,Context,RContext,ActualAttribute>(const RHS &,Iterator &,const Iterator &,const Context &,RContext &,ActualAttribute &,boost::mpl::false_)' being compiled
        with
        [
            ID=`anonymous-namespace'::bug::node_,
            RHS=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Iterator=char *,
            Context=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/nonterminal/detail/rule.hpp(281): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::string,int>>,ID>::parse_rhs_main<RHS,Iterator,Context,RContext,ActualAttribute>(const RHS &,Iterator &,const Iterator &,const Context &,RContext &,ActualAttribute &)' being compiled
        with
        [
            ID=`anonymous-namespace'::bug::node_,
            RHS=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Iterator=char *,
            Context=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/nonterminal/detail/rule.hpp(281): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::string,int>>,ID>::parse_rhs_main<RHS,Iterator,Context,RContext,ActualAttribute>(const RHS &,Iterator &,const Iterator &,const Context &,RContext &,ActualAttribute &)' being compiled
        with
        [
            ID=`anonymous-namespace'::bug::node_,
            RHS=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Iterator=char *,
            Context=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/nonterminal/detail/rule.hpp(340): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::string,int>>,ID>::parse_rhs<RHS,Iterator,Context,Attribute,Attribute>(const RHS &,Iterator &,const Iterator &,const Context &,RContext &,ActualAttribute &,boost::mpl::false_)' being compiled
        with
        [
            ID=`anonymous-namespace'::bug::node_,
            RHS=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Iterator=char *,
            Context=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/nonterminal/detail/rule.hpp(334): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::string,int>>,ID>::parse_rhs<RHS,Iterator,Context,Attribute,Attribute>(const RHS &,Iterator &,const Iterator &,const Context &,RContext &,ActualAttribute &,boost::mpl::false_)' being compiled
        with
        [
            ID=`anonymous-namespace'::bug::node_,
            RHS=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Iterator=char *,
            Context=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>,
            RContext=boost::optional<boost::fusion::deque<std::string,int>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/nonterminal/rule.hpp(65): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::string,int>>,ID>::call_rule_definition<RHS,Iterator,Context,Attribute_,boost::mpl::bool_<false>>(const RHS &,const char *,Iterator &,const Iterator &,const Context &,ActualAttribute &,ExplicitAttrPropagation)' being compiled
        with
        [
            ID=`anonymous-namespace'::bug::node_,
            RHS=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Iterator=char *,
            Context=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            Attribute_=boost::optional<boost::fusion::deque<std::string,int>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>,
            ExplicitAttrPropagation=boost::mpl::bool_<false>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/nonterminal/rule.hpp(60): note: see reference to function template instantiation 'bool boost::spirit::x3::detail::rule_parser<boost::optional<boost::fusion::deque<std::string,int>>,ID>::call_rule_definition<RHS,Iterator,Context,Attribute_,boost::mpl::bool_<false>>(const RHS &,const char *,Iterator &,const Iterator &,const Context &,ActualAttribute &,ExplicitAttrPropagation)' being compiled
        with
        [
            ID=`anonymous-namespace'::bug::node_,
            RHS=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Iterator=char *,
            Context=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            Attribute_=boost::optional<boost::fusion::deque<std::string,int>>,
            ActualAttribute=boost::optional<boost::fusion::deque<std::string,int>>,
            ExplicitAttrPropagation=boost::mpl::bool_<false>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/core/parse.hpp(119): note: see reference to function template instantiation 'bool boost::spirit::x3::rule_definition<ID,Derived,Attribute,false>::parse<Iterator,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard,boost::spirit::x3::space_tag>,boost::spirit::x3::unused_type>,Attribute>(Iterator &,const Iterator &,const Context &,boost::spirit::x3::unused_type,Attribute_ &) const' being compiled
        with
        [
            ID=`anonymous-namespace'::bug::node_,
            Derived=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>,
            Iterator=char *,
            Context=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            Attribute_=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/core/parse.hpp(119): note: see reference to function template instantiation 'bool boost::spirit::x3::rule_definition<ID,Derived,Attribute,false>::parse<Iterator,boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::char_class<boost::spirit::char_encoding::standard,boost::spirit::x3::space_tag>,boost::spirit::x3::unused_type>,Attribute>(Iterator &,const Iterator &,const Context &,boost::spirit::x3::unused_type,Attribute_ &) const' being compiled
        with
        [
            ID=`anonymous-namespace'::bug::node_,
            Derived=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>,
            Iterator=char *,
            Context=boost::spirit::x3::context<boost::spirit::x3::skipper_tag,const boost::spirit::x3::standard::space_type,boost::spirit::x3::unused_type>,
            Attribute_=boost::optional<boost::fusion::deque<std::string,int>>
        ]
c:\home\lib\boost_1_68_0\boost/spirit/home/x3/core/parse.hpp(151): note: see reference to function template instantiation 'bool boost::spirit::x3::phrase_parse_main<Iterator,Parser,Skipper,Attribute>(Iterator &,Iterator,const Parser &,const Skipper &,Attribute &,boost::spirit::x3::skip_flag)' being compiled
        with
        [
            Iterator=char *,
            Parser=boost::spirit::x3::rule_definition<`anonymous-namespace'::bug::node_,boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::optional<boost::fusion::deque<std::string,int>>,false>,
            Skipper=boost::spirit::x3::standard::space_type,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>
        ]
x3_bug.cpp(31): note: see reference to function template instantiation 'bool boost::spirit::x3::phrase_parse<_Ty*,boost::spirit::x3::rule_definition<ID,Derived,Attribute,false>,boost::spirit::x3::standard::space_type,boost::optional<boost::fusion::deque<std::string,int>>>(const Iterator &,Iterator,const Parser &,const Skipper &,Attribute &,boost::spirit::x3::skip_flag)' being compiled
        with
        [
            _Ty=char,
            ID=`anonymous-namespace'::bug::node_,
            Derived=boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,
            Attribute=boost::optional<boost::fusion::deque<std::string,int>>,
            Iterator=char *,
            Parser=boost::spirit::x3::rule_definition<`anonymous-namespace'::bug::node_,boost::spirit::x3::alternative<boost::spirit::x3::sequence<boost::spirit::x3::kleene<boost::spirit::x3::standard::graph_type>,boost::spirit::x3::int_type>,boost::spirit::x3::literal_char<boost::spirit::char_encoding::standard,boost::spirit::x3::unused_type>>,boost::optional<boost::fusion::deque<std::string,int>>,false>,
            Skipper=boost::spirit::x3::standard::space_type
        ]