Re: x3 linker error with separate TU
Olaf Peter <[email protected]>
| Newsgroups | gmane.comp.parsers.spirit.general |
|---|---|
| Message-ID | <[email protected]> |
Hello Larry, > On 05/26/2017 03:44 PM, Larry Evans wrote: > [snip] > >> and I *guess* the attribute transform Seth talked about was that >> encapsulated in rule_attr_transform here: >> >> https://github.com/cppljevans/spirit/blob/get_rhs/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp#L311 >> >> >> and where rule_attr_transform is done is governed by the macro: >> >> BOOST_SPIRIT_DISABLE_RULE_ATTR_XFORM >> > OOPS. That should be: > > BOOST_SPIRIT_ATTR_XFORM_IN_RULE > > I've only a foggy memory of what BOOST_SPIRIT_DISABLE_RULE_ATTR_XFORM > is for. Maybe the get_rhs fork is not ready for pull request now :( thank you for your effort! I did clone your https://github.com/cppljevans/spirit/tree/get_rhs into the sources and changed the CMake file accordingly , but run into compile errors now. The defines are taken from your responses, also your successfully finished compile log file above. But following your links there seems to be no easy solution yet. Fortunately it's a spare time project ... Or, do I miss something? Thanks, Olaf ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Spirit-general mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/spirit-general
CMakeLists.txt
(text/plain, 1.2 KB)
cmake_minimum_required(VERSION 3.6)
project(x3_linker_error LANGUAGES CXX)
find_package(Boost REQUIRED COMPONENTS system)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# lib
add_library(${PROJECT_NAME}_x3 STATIC
literal.cpp
)
target_include_directories(${PROJECT_NAME}_x3
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/cppljevans/include
)
target_compile_definitions(${PROJECT_NAME}_x3 PRIVATE
BOOST_SPIRIT_GET_RHS_CRTP=1 BOOST_SPIRIT_ATTR_XFORM_IN_RULE=1
)
# exe
add_executable(${PROJECT_NAME}
main.cpp
)
target_include_directories(${PROJECT_NAME}
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/cppljevans/include
)
target_compile_definitions(${PROJECT_NAME} PRIVATE
BOOST_SPIRIT_GET_RHS_CRTP=1 BOOST_SPIRIT_ATTR_XFORM_IN_RULE=1
BOOST_ERROR_CODE_HEADER_ONLY
)
target_link_libraries(${PROJECT_NAME}
PRIVATE
${PROJECT_NAME}_x3
${Boost_SYSTEM_LIBRARY}
)
set(CMAKE_VERBOSE_MAKEFILE ON)
option(LINKER_ERROR "Enforce the linker error" ON)
if(LINKER_ERROR)
message("## Build to show linker errors")
target_compile_definitions(${PROJECT_NAME}_x3 PRIVATE LINKER_ERROR)
target_compile_definitions(${PROJECT_NAME} PRIVATE LINKER_ERROR)
endif()
compile_log.txt
(text/plain, 39.4 KB)
$ CXX=/usr/local/gcc-7.1.0/bin/g++ /usr/local/gcc-7.1.0/bin/cmake ../x3_linker_error && LANG=en make
-- The CXX compiler identification is GNU 7.1.0
-- Check for working CXX compiler: /usr/local/gcc-7.1.0/bin/g++
-- Check for working CXX compiler: /usr/local/gcc-7.1.0/bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Boost version: 1.60.0
-- Found the following Boost libraries:
-- system
## Build to show linker errors
-- Configuring done
-- Generating done
-- Build files have been written to: /home/olaf/work/CXX/x3_linker_error_build
/usr/local/gcc-7.1.0/bin/cmake -H/home/olaf/work/CXX/x3_linker_error -B/home/olaf/work/CXX/x3_linker_error_build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/local/gcc-7.1.0/bin/cmake -E cmake_progress_start /home/olaf/work/CXX/x3_linker_error_build/CMakeFiles /home/olaf/work/CXX/x3_linker_error_build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/olaf/work/CXX/x3_linker_error_build'
make -f CMakeFiles/x3_linker_error_x3.dir/build.make CMakeFiles/x3_linker_error_x3.dir/depend
make[2]: Entering directory '/home/olaf/work/CXX/x3_linker_error_build'
cd /home/olaf/work/CXX/x3_linker_error_build && /usr/local/gcc-7.1.0/bin/cmake -E cmake_depends "Unix Makefiles" /home/olaf/work/CXX/x3_linker_error /home/olaf/work/CXX/x3_linker_error /home/olaf/work/CXX/x3_linker_error_build /home/olaf/work/CXX/x3_linker_error_build /home/olaf/work/CXX/x3_linker_error_build/CMakeFiles/x3_linker_error_x3.dir/DependInfo.cmake --color=
Scanning dependencies of target x3_linker_error_x3
make[2]: Leaving directory '/home/olaf/work/CXX/x3_linker_error_build'
make -f CMakeFiles/x3_linker_error_x3.dir/build.make CMakeFiles/x3_linker_error_x3.dir/build
make[2]: Entering directory '/home/olaf/work/CXX/x3_linker_error_build'
[ 25%] Building CXX object CMakeFiles/x3_linker_error_x3.dir/literal.cpp.o
/usr/local/gcc-7.1.0/bin/g++ -DBOOST_SPIRIT_ATTR_XFORM_IN_RULE=1 -DBOOST_SPIRIT_GET_RHS_CRTP=1 -DLINKER_ERROR -I/home/olaf/work/CXX/x3_linker_error/cppljevans/include -std=c++14 -o CMakeFiles/x3_linker_error_x3.dir/literal.cpp.o -c /home/olaf/work/CXX/x3_linker_error/literal.cpp
In file included from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal.hpp:10:0,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3.hpp:17,
from /home/olaf/work/CXX/x3_linker_error/literal.hpp:5,
from /home/olaf/work/CXX/x3_linker_error/literal_def.hpp:4,
from /home/olaf/work/CXX/x3_linker_error/literal.cpp:1:
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:17:19: note: #pragma message: yes(BOOST_SPIRIT_ATTR_XFORM_IN_RULE)
#pragma message "yes(BOOST_SPIRIT_ATTR_XFORM_IN_RULE)"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:26:19: note: #pragma message: yes(BOOST_SPIRIT_GET_RHS_CRTP)
#pragma message "yes(BOOST_SPIRIT_GET_RHS_CRTP)"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 50%] Linking CXX static library libx3_linker_error_x3.a
/usr/local/gcc-7.1.0/bin/cmake -P CMakeFiles/x3_linker_error_x3.dir/cmake_clean_target.cmake
/usr/local/gcc-7.1.0/bin/cmake -E cmake_link_script CMakeFiles/x3_linker_error_x3.dir/link.txt --verbose=1
/usr/local/gcc-7.1.0/bin/ar qc libx3_linker_error_x3.a CMakeFiles/x3_linker_error_x3.dir/literal.cpp.o
/usr/local/gcc-7.1.0/bin/ranlib libx3_linker_error_x3.a
make[2]: Leaving directory '/home/olaf/work/CXX/x3_linker_error_build'
[ 50%] Built target x3_linker_error_x3
make -f CMakeFiles/x3_linker_error.dir/build.make CMakeFiles/x3_linker_error.dir/depend
make[2]: Entering directory '/home/olaf/work/CXX/x3_linker_error_build'
cd /home/olaf/work/CXX/x3_linker_error_build && /usr/local/gcc-7.1.0/bin/cmake -E cmake_depends "Unix Makefiles" /home/olaf/work/CXX/x3_linker_error /home/olaf/work/CXX/x3_linker_error /home/olaf/work/CXX/x3_linker_error_build /home/olaf/work/CXX/x3_linker_error_build /home/olaf/work/CXX/x3_linker_error_build/CMakeFiles/x3_linker_error.dir/DependInfo.cmake --color=
Scanning dependencies of target x3_linker_error
make[2]: Leaving directory '/home/olaf/work/CXX/x3_linker_error_build'
make -f CMakeFiles/x3_linker_error.dir/build.make CMakeFiles/x3_linker_error.dir/build
make[2]: Entering directory '/home/olaf/work/CXX/x3_linker_error_build'
[ 75%] Building CXX object CMakeFiles/x3_linker_error.dir/main.cpp.o
/usr/local/gcc-7.1.0/bin/g++ -DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SPIRIT_ATTR_XFORM_IN_RULE=1 -DBOOST_SPIRIT_GET_RHS_CRTP=1 -DLINKER_ERROR -I/home/olaf/work/CXX/x3_linker_error/cppljevans/include -std=c++14 -o CMakeFiles/x3_linker_error.dir/main.cpp.o -c /home/olaf/work/CXX/x3_linker_error/main.cpp
In file included from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal.hpp:10:0,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3.hpp:17,
from /home/olaf/work/CXX/x3_linker_error/grammar_def.hpp:2,
from /home/olaf/work/CXX/x3_linker_error/main.cpp:1:
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:17:19: note: #pragma message: yes(BOOST_SPIRIT_ATTR_XFORM_IN_RULE)
#pragma message "yes(BOOST_SPIRIT_ATTR_XFORM_IN_RULE)"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:26:19: note: #pragma message: yes(BOOST_SPIRIT_GET_RHS_CRTP)
#pragma message "yes(BOOST_SPIRIT_GET_RHS_CRTP)"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal.hpp:10:0,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3.hpp:17,
from /home/olaf/work/CXX/x3_linker_error/grammar_def.hpp:2,
from /home/olaf/work/CXX/x3_linker_error/main.cpp:1:
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp: In instantiation of 'bool boost::spirit::x3::rule<ID, Attribute, force_attribute>::parse(Iterator&, const Iterator&, const Context&, boost::spirit::x3::unused_type, ActualAttribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ID = parser::factor_class; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; bool force_attribute_ = false]':
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/directive/with.hpp:62:21: required from 'bool boost::spirit::x3::with_directive<Subject, ID, T>::parse(Iterator&, const Iterator&, const Context&, RContext&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>; RContext = const boost::spirit::x3::unused_type; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; Subject = boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >; ID = boost::spirit::x3::error_handler_tag; T = const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/core/parse.hpp:117:14: required from 'bool boost::spirit::x3::phrase_parse_main(Iterator&, Iterator, const Parser&, const Skipper&, Attribute&, boost::spirit::x3::skip_flag) [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Parser = boost::spirit::x3::with_directive<boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >, boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > > >; Skipper = boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/core/parse.hpp:134:33: required from 'bool boost::spirit::x3::phrase_parse(Iterator&, Iterator, const Parser&, const Skipper&, Attribute&, boost::spirit::x3::skip_flag) [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Parser = boost::spirit::x3::with_directive<boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >, boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > > >; Skipper = boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >]'
/home/olaf/work/CXX/x3_linker_error/main.cpp:23:82: required from here
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:241:13: error: no matching function for call to 'boost::spirit::x3::detail::rule_parser<boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >, parser::factor_class>::rule_attr_transform<boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >::post(bool&, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >&, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >&)'
rat_v.post(ok_parse,attr,attr_);
^~~~~
In file included from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:31:0,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal.hpp:10,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3.hpp:17,
from /home/olaf/work/CXX/x3_linker_error/grammar_def.hpp:2,
from /home/olaf/work/CXX/x3_linker_error/main.cpp:1:
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:356:16: note: candidate: void boost::spirit::x3::detail::rule_parser<Attribute, ID>::rule_attr_transform<ActualAttribute>::post(bool, ActualAttribute&) [with ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ID = parser::factor_class]
void post(bool ok_parse, ActualAttribute& attr)
^~~~
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:356:16: note: candidate expects 2 arguments, 3 provided
In file included from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal.hpp:10:0,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3.hpp:17,
from /home/olaf/work/CXX/x3_linker_error/grammar_def.hpp:2,
from /home/olaf/work/CXX/x3_linker_error/main.cpp:1:
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp: In instantiation of 'bool boost::spirit::x3::rule<ID, Attribute, force_attribute>::parse(Iterator&, const Iterator&, const Context&, boost::spirit::x3::unused_type, ActualAttribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ID = parser::primary_class; Attribute = boost::spirit::x3::variant<ast::string_literal>; bool force_attribute_ = false]':
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:222:18: required from 'static bool boost::spirit::x3::detail::rule_parser<Attribute, ID>::parse_rhs_have_on_error(const RHS&, Iterator&, const Iterator&, const Context&, RContext&, ActualAttribute&, mpl_::false_) [with RHS = boost::spirit::x3::rule<parser::primary_class, boost::spirit::x3::variant<ast::string_literal> >; Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; RContext = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ID = parser::factor_class; mpl_::false_ = mpl_::bool_<false>]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:282:43: required from 'static bool boost::spirit::x3::detail::rule_parser<Attribute, ID>::parse_rhs_main(const RHS&, Iterator&, const Iterator&, const Context&, RContext&, ActualAttribute&) [with RHS = boost::spirit::x3::rule<parser::primary_class, boost::spirit::x3::variant<ast::string_literal> >; Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; RContext = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ID = parser::factor_class]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:296:34: required from 'static bool boost::spirit::x3::detail::rule_parser<Attribute, ID>::parse_rhs(const RHS&, Iterator&, const Iterator&, const Context&, RContext&, ActualAttribute&, mpl_::false_) [with RHS = boost::spirit::x3::rule<parser::primary_class, boost::spirit::x3::variant<ast::string_literal> >; Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; RContext = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ID = parser::factor_class; mpl_::false_ = mpl_::bool_<false>]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:387:38: required from 'static bool boost::spirit::x3::detail::rule_parser<Attribute, ID>::call_rule_definition(const RHS&, const char*, Iterator&, const Iterator&, const Context&, ActualAttribute&, ExplicitAttrPropagation) [with RHS = boost::spirit::x3::rule<parser::primary_class, boost::spirit::x3::variant<ast::string_literal> >; Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ExplicitAttrPropagation = mpl_::bool_<false>; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ID = parser::factor_class]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:159:39: required from 'bool boost::spirit::x3::rule_definition<ID, RHS, Attribute, force_attribute_>::parse(Iterator&, const Iterator&, const Context&, boost::spirit::x3::unused_type, ActualAttribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ID = parser::factor_class; RHS = boost::spirit::x3::rule<parser::primary_class, boost::spirit::x3::variant<ast::string_literal> >; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; bool force_attribute_ = false]'
/home/olaf/work/CXX/x3_linker_error/grammar_def.hpp:45:5: required from 'bool parser::parse_rule(parser::factor_type, Iterator&, const Iterator&, const Context&, Attribute&) [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; parser::factor_type = boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:239:38: required from 'bool boost::spirit::x3::rule<ID, Attribute, force_attribute>::parse(Iterator&, const Iterator&, const Context&, boost::spirit::x3::unused_type, ActualAttribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ID = parser::factor_class; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; bool force_attribute_ = false]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/directive/with.hpp:62:21: required from 'bool boost::spirit::x3::with_directive<Subject, ID, T>::parse(Iterator&, const Iterator&, const Context&, RContext&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>; RContext = const boost::spirit::x3::unused_type; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; Subject = boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >; ID = boost::spirit::x3::error_handler_tag; T = const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/core/parse.hpp:117:14: required from 'bool boost::spirit::x3::phrase_parse_main(Iterator&, Iterator, const Parser&, const Skipper&, Attribute&, boost::spirit::x3::skip_flag) [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Parser = boost::spirit::x3::with_directive<boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >, boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > > >; Skipper = boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/core/parse.hpp:134:33: required from 'bool boost::spirit::x3::phrase_parse(Iterator&, Iterator, const Parser&, const Skipper&, Attribute&, boost::spirit::x3::skip_flag) [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Parser = boost::spirit::x3::with_directive<boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >, boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > > >; Skipper = boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >]'
/home/olaf/work/CXX/x3_linker_error/main.cpp:23:82: required from here
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:241:13: error: no matching function for call to 'boost::spirit::x3::detail::rule_parser<boost::spirit::x3::variant<ast::string_literal>, parser::primary_class>::rule_attr_transform<boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >::post(bool&, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >&, boost::spirit::x3::variant<ast::string_literal>&)'
rat_v.post(ok_parse,attr,attr_);
^~~~~
In file included from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:31:0,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal.hpp:10,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3.hpp:17,
from /home/olaf/work/CXX/x3_linker_error/grammar_def.hpp:2,
from /home/olaf/work/CXX/x3_linker_error/main.cpp:1:
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:356:16: note: candidate: void boost::spirit::x3::detail::rule_parser<Attribute, ID>::rule_attr_transform<ActualAttribute>::post(bool, ActualAttribute&) [with ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; Attribute = boost::spirit::x3::variant<ast::string_literal>; ID = parser::primary_class]
void post(bool ok_parse, ActualAttribute& attr)
^~~~
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:356:16: note: candidate expects 2 arguments, 3 provided
In file included from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal.hpp:10:0,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3.hpp:17,
from /home/olaf/work/CXX/x3_linker_error/grammar_def.hpp:2,
from /home/olaf/work/CXX/x3_linker_error/main.cpp:1:
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp: In instantiation of 'bool boost::spirit::x3::rule<ID, Attribute, force_attribute>::parse(Iterator&, const Iterator&, const Context&, boost::spirit::x3::unused_type, ActualAttribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; ActualAttribute = boost::spirit::x3::variant<ast::string_literal>; ID = parser::string_literal_class; Attribute = ast::string_literal; bool force_attribute_ = false]':
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:222:18: required from 'static bool boost::spirit::x3::detail::rule_parser<Attribute, ID>::parse_rhs_have_on_error(const RHS&, Iterator&, const Iterator&, const Context&, RContext&, ActualAttribute&, mpl_::false_) [with RHS = boost::spirit::x3::rule<parser::string_literal_class, ast::string_literal>; Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; RContext = boost::spirit::x3::variant<ast::string_literal>; ActualAttribute = boost::spirit::x3::variant<ast::string_literal>; Attribute = boost::spirit::x3::variant<ast::string_literal>; ID = parser::primary_class; mpl_::false_ = mpl_::bool_<false>]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:282:43: required from 'static bool boost::spirit::x3::detail::rule_parser<Attribute, ID>::parse_rhs_main(const RHS&, Iterator&, const Iterator&, const Context&, RContext&, ActualAttribute&) [with RHS = boost::spirit::x3::rule<parser::string_literal_class, ast::string_literal>; Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; RContext = boost::spirit::x3::variant<ast::string_literal>; ActualAttribute = boost::spirit::x3::variant<ast::string_literal>; Attribute = boost::spirit::x3::variant<ast::string_literal>; ID = parser::primary_class]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:296:34: required from 'static bool boost::spirit::x3::detail::rule_parser<Attribute, ID>::parse_rhs(const RHS&, Iterator&, const Iterator&, const Context&, RContext&, ActualAttribute&, mpl_::false_) [with RHS = boost::spirit::x3::rule<parser::string_literal_class, ast::string_literal>; Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; RContext = boost::spirit::x3::variant<ast::string_literal>; ActualAttribute = boost::spirit::x3::variant<ast::string_literal>; Attribute = boost::spirit::x3::variant<ast::string_literal>; ID = parser::primary_class; mpl_::false_ = mpl_::bool_<false>]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:387:38: required from 'static bool boost::spirit::x3::detail::rule_parser<Attribute, ID>::call_rule_definition(const RHS&, const char*, Iterator&, const Iterator&, const Context&, ActualAttribute&, ExplicitAttrPropagation) [with RHS = boost::spirit::x3::rule<parser::string_literal_class, ast::string_literal>; Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; ActualAttribute = boost::spirit::x3::variant<ast::string_literal>; ExplicitAttrPropagation = mpl_::bool_<false>; Attribute = boost::spirit::x3::variant<ast::string_literal>; ID = parser::primary_class]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:159:39: required from 'bool boost::spirit::x3::rule_definition<ID, RHS, Attribute, force_attribute_>::parse(Iterator&, const Iterator&, const Context&, boost::spirit::x3::unused_type, ActualAttribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; ActualAttribute = boost::spirit::x3::variant<ast::string_literal>; ID = parser::primary_class; RHS = boost::spirit::x3::rule<parser::string_literal_class, ast::string_literal>; Attribute = boost::spirit::x3::variant<ast::string_literal>; bool force_attribute_ = false]'
/home/olaf/work/CXX/x3_linker_error/grammar_def.hpp:45:5: [ skipping 7 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/olaf/work/CXX/x3_linker_error/grammar_def.hpp:45:5: required from 'bool parser::parse_rule(parser::factor_type, Iterator&, const Iterator&, const Context&, Attribute&) [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; parser::factor_type = boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:239:38: required from 'bool boost::spirit::x3::rule<ID, Attribute, force_attribute>::parse(Iterator&, const Iterator&, const Context&, boost::spirit::x3::unused_type, ActualAttribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >, boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type> >; ActualAttribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; ID = parser::factor_class; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; bool force_attribute_ = false]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/directive/with.hpp:62:21: required from 'bool boost::spirit::x3::with_directive<Subject, ID, T>::parse(Iterator&, const Iterator&, const Context&, RContext&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Context = boost::spirit::x3::context<boost::spirit::x3::skipper_tag, const boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>, boost::spirit::x3::unused_type>; RContext = const boost::spirit::x3::unused_type; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >; Subject = boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >; ID = boost::spirit::x3::error_handler_tag; T = const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > >]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/core/parse.hpp:117:14: required from 'bool boost::spirit::x3::phrase_parse_main(Iterator&, Iterator, const Parser&, const Skipper&, Attribute&, boost::spirit::x3::skip_flag) [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Parser = boost::spirit::x3::with_directive<boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >, boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > > >; Skipper = boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >]'
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/core/parse.hpp:134:33: required from 'bool boost::spirit::x3::phrase_parse(Iterator&, Iterator, const Parser&, const Skipper&, Attribute&, boost::spirit::x3::skip_flag) [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> >; Parser = boost::spirit::x3::with_directive<boost::spirit::x3::rule<parser::factor_class, boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> > >, boost::spirit::x3::error_handler_tag, const std::reference_wrapper<boost::spirit::x3::error_handler<__gnu_cxx::__normal_iterator<const char*, std::__cxx11::basic_string<char> > > > >; Skipper = boost::spirit::x3::char_class<boost::spirit::char_encoding::iso8859_1, boost::spirit::x3::space_tag>; Attribute = boost::spirit::x3::variant<boost::spirit::x3::variant<ast::string_literal> >]'
/home/olaf/work/CXX/x3_linker_error/main.cpp:23:82: required from here
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:241:13: error: no matching function for call to 'boost::spirit::x3::detail::rule_parser<ast::string_literal, parser::string_literal_class>::rule_attr_transform<boost::spirit::x3::variant<ast::string_literal> >::post(bool&, boost::spirit::x3::variant<ast::string_literal>&, ast::string_literal&)'
rat_v.post(ok_parse,attr,attr_);
^~~~~
In file included from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/rule.hpp:31:0,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal.hpp:10,
from /home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3.hpp:17,
from /home/olaf/work/CXX/x3_linker_error/grammar_def.hpp:2,
from /home/olaf/work/CXX/x3_linker_error/main.cpp:1:
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:356:16: note: candidate: void boost::spirit::x3::detail::rule_parser<Attribute, ID>::rule_attr_transform<ActualAttribute>::post(bool, ActualAttribute&) [with ActualAttribute = boost::spirit::x3::variant<ast::string_literal>; Attribute = ast::string_literal; ID = parser::string_literal_class]
void post(bool ok_parse, ActualAttribute& attr)
^~~~
/home/olaf/work/CXX/x3_linker_error/cppljevans/include/boost/spirit/home/x3/nonterminal/detail/rule.hpp:356:16: note: candidate expects 2 arguments, 3 provided
CMakeFiles/x3_linker_error.dir/build.make:65: recipe for target 'CMakeFiles/x3_linker_error.dir/main.cpp.o' failed
make[2]: *** [CMakeFiles/x3_linker_error.dir/main.cpp.o] Error 1
make[2]: Leaving directory '/home/olaf/work/CXX/x3_linker_error_build'
CMakeFiles/Makefile2:107: recipe for target 'CMakeFiles/x3_linker_error.dir/all' failed
make[1]: *** [CMakeFiles/x3_linker_error.dir/all] Error 2
make[1]: Leaving directory '/home/olaf/work/CXX/x3_linker_error_build'
Makefile:86: recipe for target 'all' failed
make: *** [all] Error 2