Opened 9 years ago

Last modified 9 years ago

#9399 new Bugs

Can't build 1.55.0 release with GCC 4.x and -std=c++0x

Reported by: adam@… Owned by:
Milestone: To Be Determined Component: Building Boost
Version: Boost 1.55.0 Severity: Problem
Keywords: Cc:

Description

Hello,

I cannot build boost 1.55.0 with GCC 4.5.4, nor GCC 4.8.2, and -std=c++0x on NetBSD, Solaris, nor OS X. It always stops on "error: no matching function for call to 'call_once(boost::once_flag&, void (&)())'". For example:

gcc.compile.c++ bin.v2/libs/wave/build/gcc-4.5.4/release/threading-multi/instantiate_cpp_grammar.o
In file included from ./boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp:15:0,
                 from ./boost/spirit/home/classic/core/non_terminal/grammar.hpp:21,
                 from ./boost/spirit/home/classic/core.hpp:42,
                 from ./boost/spirit/include/classic_core.hpp:11,
                 from ./boost/wave/grammars/cpp_grammar.hpp:14,
                 from libs/wave/src/instantiate_cpp_grammar.cpp:24:
./boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp: In member function 'IdT boost::spirit::classic::impl::object_with_id_base<TagT, IdT>::acquire_object_id() [with TagT = boost::spirit::classic::impl::grammar_tag, IdT = long unsigned int]':
./boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp:78:62:   instantiated from 'boost::spirit::classic::impl::object_with_id<TagT, IdT>::object_with_id() [with TagT = boost::spirit::classic::impl::grammar_tag, IdT = long unsigned int]'
./boost/spirit/home/classic/core/non_terminal/grammar.hpp:51:15:   instantiated from 'boost::spirit::classic::grammar<DerivedT, ContextT>::grammar() [with DerivedT = boost::wave::grammars::cpp_grammar<boost::wave::cpplexer::lex_token<>, std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > > >, ContextT = boost::spirit::classic::parser_context<>]'
./boost/wave/grammars/cpp_grammar.hpp:623:41:   instantiated from 'boost::wave::grammars::cpp_grammar<TokenT, ContainerT>::cpp_grammar(bool&, TokenT&, ContainerT&) [with TokenT = boost::wave::cpplexer::lex_token<>, ContainerT = std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > >]'
./boost/wave/grammars/cpp_grammar.hpp:738:91:   instantiated from 'static boost::spirit::classic::tree_parse_info<IteratorT> boost::wave::grammars::cpp_grammar_gen<LexIteratorT, TokenContainerT>::parse_cpp_grammar(const LexIteratorT&, const LexIteratorT&, boost::wave::grammars::cpp_grammar_gen<LexIteratorT, TokenContainerT>::position_type&, bool&, boost::wave::grammars::cpp_grammar_gen<LexIteratorT, TokenContainerT>::token_type&, token_container_type&) [with LexIteratorT = boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, TokenContainerT = std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > >, boost::wave::grammars::cpp_grammar_gen<LexIteratorT, TokenContainerT>::position_type = boost::wave::util::file_position<boost::wave::util::flex_string<char, std::char_traits<char>, std::allocator<char>, boost::wave::util::CowString<boost::wave::util::AllocatorStringStorage<char> > > >, boost::wave::grammars::cpp_grammar_gen<LexIteratorT, TokenContainerT>::token_type = boost::wave::cpplexer::lex_token<>, token_container_type = std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > >]'
libs/wave/src/instantiate_cpp_grammar.cpp:48:40:   instantiated from here
./boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp:140:17: error: no matching function for call to 'call_once(boost::once_flag&, void (&)())'
In file included from ./boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp:18:0,
                 from ./boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp:15,
                 from ./boost/spirit/home/classic/core/non_terminal/grammar.hpp:21,
                 from ./boost/spirit/home/classic/core.hpp:42,
                 from ./boost/spirit/include/classic_core.hpp:11,
                 from ./boost/wave/grammars/cpp_grammar.hpp:14,
                 from libs/wave/src/instantiate_cpp_grammar.cpp:24:
./boost/thread/once.hpp: In function 'void boost::call_once(Function, boost::once_flag&) [with Function = void (*)()]':
./boost/spirit/home/classic/core/non_terminal/impl/static.hpp:72:13:   instantiated from 'boost::spirit::classic::static_<T, Tag>::static_(Tag) [with T = boost::thread_specific_ptr<boost::weak_ptr<boost::spirit::classic::impl::grammar_helper<boost::spirit::classic::grammar<boost::wave::grammars::cpp_grammar<boost::wave::cpplexer::lex_token<>, std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > > >, boost::spirit::classic::parser_context<> >, boost::wave::grammars::cpp_grammar<boost::wave::cpplexer::lex_token<>, std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > > >, boost::spirit::classic::scanner<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::scanner_policies<boost::spirit::classic::iteration_policy, boost::spirit::classic::pt_match_policy<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::node_val_data_factory<boost::spirit::classic::nil_t>, boost::spirit::classic::nil_t>, boost::spirit::classic::action_policy> > > > >, Tag = boost::spirit::classic::impl::get_definition_static_data_tag]'
./boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp:241:81:   instantiated from 'typename DerivedT::definition<ScannerT>& boost::spirit::classic::impl::get_definition(const boost::spirit::classic::grammar<DerivedT, ContextT>*) [with DerivedT = boost::wave::grammars::cpp_grammar<boost::wave::cpplexer::lex_token<>, std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > > >, ContextT = boost::spirit::classic::parser_context<>, ScannerT = boost::spirit::classic::scanner<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::scanner_policies<boost::spirit::classic::iteration_policy, boost::spirit::classic::pt_match_policy<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::node_val_data_factory<boost::spirit::classic::nil_t>, boost::spirit::classic::nil_t>, boost::spirit::classic::action_policy> >, typename DerivedT::definition<ScannerT> = boost::wave::grammars::cpp_grammar<boost::wave::cpplexer::lex_token<>, std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > > >::definition<boost::spirit::classic::scanner<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::scanner_policies<boost::spirit::classic::iteration_policy, boost::spirit::classic::pt_match_policy<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::node_val_data_factory<boost::spirit::classic::nil_t>, boost::spirit::classic::nil_t>, boost::spirit::classic::action_policy> > >]'
./boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp:296:78:   instantiated from 'typename boost::spirit::classic::parser_result<boost::spirit::classic::grammar<DerivedT, ContextT>, ScannerT>::type boost::spirit::classic::impl::grammar_parser_parse(const boost::spirit::classic::grammar<DerivedT, ContextT>*, const ScannerT&) [with int N = 0, DerivedT = boost::wave::grammars::cpp_grammar<boost::wave::cpplexer::lex_token<>, std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > > >, ContextT = boost::spirit::classic::parser_context<>, ScannerT = boost::spirit::classic::scanner<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::scanner_policies<boost::spirit::classic::iteration_policy, boost::spirit::classic::pt_match_policy<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::node_val_data_factory<boost::spirit::classic::nil_t>, boost::spirit::classic::nil_t>, boost::spirit::classic::action_policy> >, typename boost::spirit::classic::parser_result<boost::spirit::classic::grammar<DerivedT, ContextT>, ScannerT>::type = boost::spirit::classic::tree_match<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::node_val_data_factory<boost::spirit::classic::nil_t>, boost::spirit::classic::nil_t>]'
./boost/spirit/home/classic/core/non_terminal/grammar.hpp:57:54:   instantiated from 'typename boost::spirit::classic::parser_result<boost::spirit::classic::grammar<DerivedT, ContextT>, ScannerT>::type boost::spirit::classic::grammar<DerivedT, ContextT>::parse_main(const ScannerT&) const [with ScannerT = boost::spirit::classic::scanner<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::scanner_policies<boost::spirit::classic::iteration_policy, boost::spirit::classic::pt_match_policy<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::node_val_data_factory<boost::spirit::classic::nil_t>, boost::spirit::classic::nil_t>, boost::spirit::classic::action_policy> >, DerivedT = boost::wave::grammars::cpp_grammar<boost::wave::cpplexer::lex_token<>, std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > > >, ContextT = boost::spirit::classic::parser_context<>, typename boost::spirit::classic::parser_result<boost::spirit::classic::grammar<DerivedT, ContextT>, ScannerT>::type = boost::spirit::classic::tree_match<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::node_val_data_factory<boost::spirit::classic::nil_t>, boost::spirit::classic::nil_t>]'
./boost/spirit/home/classic/core/non_terminal/grammar.hpp:65:9:   instantiated from 'typename boost::spirit::classic::parser_result<boost::spirit::classic::grammar<DerivedT, ContextT>, ScannerT>::type boost::spirit::classic::grammar<DerivedT, ContextT>::parse(const ScannerT&) const [with ScannerT = boost::spirit::classic::scanner<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::scanner_policies<boost::spirit::classic::iteration_policy, boost::spirit::classic::pt_match_policy<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::node_val_data_factory<boost::spirit::classic::nil_t>, boost::spirit::classic::nil_t>, boost::spirit::classic::action_policy> >, DerivedT = boost::wave::grammars::cpp_grammar<boost::wave::cpplexer::lex_token<>, std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > > >, ContextT = boost::spirit::classic::parser_context<>, typename boost::spirit::classic::parser_result<boost::spirit::classic::grammar<DerivedT, ContextT>, ScannerT>::type = boost::spirit::classic::tree_match<boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, boost::spirit::classic::node_val_data_factory<boost::spirit::classic::nil_t>, boost::spirit::classic::nil_t>]'
./boost/wave/grammars/cpp_grammar.hpp:706:69:   instantiated from 'boost::spirit::classic::tree_parse_info<IteratorT, NodeFactoryT> boost::wave::grammars::parsetree_parse(const IteratorT&, const IteratorT&, const boost::spirit::classic::parser<SkipT>&) [with NodeFactoryT = boost::spirit::classic::node_val_data_factory<boost::spirit::classic::nil_t>, IteratorT = boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, ParserT = boost::wave::grammars::cpp_grammar<boost::wave::cpplexer::lex_token<>, std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > > >]'
./boost/wave/grammars/cpp_grammar.hpp:740:58:   instantiated from 'static boost::spirit::classic::tree_parse_info<IteratorT> boost::wave::grammars::cpp_grammar_gen<LexIteratorT, TokenContainerT>::parse_cpp_grammar(const LexIteratorT&, const LexIteratorT&, boost::wave::grammars::cpp_grammar_gen<LexIteratorT, TokenContainerT>::position_type&, bool&, boost::wave::grammars::cpp_grammar_gen<LexIteratorT, TokenContainerT>::token_type&, token_container_type&) [with LexIteratorT = boost::wave::cpplexer::lex_iterator<boost::wave::cpplexer::lex_token<> >, TokenContainerT = std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > >, boost::wave::grammars::cpp_grammar_gen<LexIteratorT, TokenContainerT>::position_type = boost::wave::util::file_position<boost::wave::util::flex_string<char, std::char_traits<char>, std::allocator<char>, boost::wave::util::CowString<boost::wave::util::AllocatorStringStorage<char> > > >, boost::wave::grammars::cpp_grammar_gen<LexIteratorT, TokenContainerT>::token_type = boost::wave::cpplexer::lex_token<>, token_container_type = std::list<boost::wave::cpplexer::lex_token<>, boost::fast_pool_allocator<boost::wave::cpplexer::lex_token<> > >]'
libs/wave/src/instantiate_cpp_grammar.cpp:48:40:   instantiated from here
./boost/thread/once.hpp:38:9: error: no matching function for call to 'call_once(boost::once_flag&, void (*&)())'
./boost/system/error_code.hpp: At global scope:
./boost/system/error_code.hpp:222:36: warning: 'boost::system::posix_category' defined but not used
./boost/system/error_code.hpp:223:36: warning: 'boost::system::errno_ecat' defined but not used
./boost/system/error_code.hpp:224:36: warning: 'boost::system::native_ecat' defined but not used

    "g++"  -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pthread -fPIC -std=c++0x -DBOOST_ALL_DYN_LINK=1 -DBOOST_ALL_NO_LIB=1 -DNDEBUG  -I"." -c -o "bin.v2/libs/wave/build/gcc-4.5.4/release/threading-multi/instantiate_cpp_grammar.o" "libs/wave/src/instantiate_cpp_grammar.cpp"

With Clang, the release builds fine. Using -std=c++98 and GCC it also builds fine.

Please, advise,

Adam

Change History (1)

comment:1 by anonymous, 9 years ago

Seems like passing cxxflags=-std=c++0x to 'bjam' is not enough: -std= flag must also be added to CXXFLAGS. Otherwise the build fails as mentioned above.

Kind regards, Adam

Note: See TracTickets for help on using tickets.