id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 2402,boost::spirit (boost-1.36.0) parsers fail to compile on MSVS 9.0 with struct member alignment being set to 1 byte,slava@…,Joel de Guzman,"When I try to compile the following code with MSVS 9.0 and boost-1.36.0 with struct member alignment being set to 1 byte, it fails with boost::STATIC_ASSERTION_FAILURE The code: {{{ parse_info pi= parse(SrchNM.begin(), SrchNM.end(), as_lower_d[ !(str_p(""w/""))[assign_a(prefix_is_w, true)] //prefix >> !list_p( (+(anychar_p - '=' - ',' - '@'))[assign_a(last_attr_name)] >> '=' >> (+(anychar_p - '=' - ',' - '@'))[MapInserter(srch_attrs, last_attr_name)] , ',' ) >> !ch_p('@') >> (*anychar_p)[assign_a(srch_word)] ]); }}} The errors reported: {{{ 1>d:\users\slava\etap\external\boost\boost\type_traits\type_with_alignment.hpp(206) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE' 1> with 1> [ 1> x=false 1> ] 1> d:\users\slava\etap\external\boost\boost\type_traits\type_with_alignment.hpp(218) : see reference to class template instantiation 'boost::detail::type_with_alignment_imp' being compiled 1> with 1> [ 1> Align=2 1> ] 1> d:\users\slava\etap\external\boost\boost\optional\optional.hpp(112) : see reference to class template instantiation 'boost::type_with_alignment' being compiled 1> with 1> [ 1> Align=2 1> ] 1> d:\users\slava\etap\external\boost\boost\optional\optional.hpp(113) : see reference to class template instantiation 'boost::optional_detail::aligned_storage::dummy_u' being compiled 1> with 1> [ 1> T=unsigned short 1> ] 1> d:\users\slava\etap\external\boost\boost\optional\optional.hpp(448) : see reference to class template instantiation 'boost::optional_detail::aligned_storage' being compiled 1> with 1> [ 1> T=unsigned short 1> ] 1> d:\users\slava\etap\external\boost\boost\optional\optional.hpp(455) : see reference to class template instantiation 'boost::optional_detail::optional_base' being compiled 1> with 1> [ 1> T=unsigned short 1> ] 1> d:\users\slava\etap\external\boost\boost\spirit\home\classic\core\match.hpp(69) : see reference to class template instantiation 'boost::optional' being compiled 1> with 1> [ 1> T=unsigned short 1> ] 1> d:\users\slava\etap\external\boost\boost\spirit\home\classic\core\composite\optional.hpp(56) : see reference to class template instantiation 'boost::spirit::match' being compiled 1> with 1> [ 1> T=unsigned short 1> ] 1> d:\users\slava\etap\external\boost\boost\spirit\home\classic\core\composite\sequence.hpp(56) : see reference to function template instantiation 'boost::spirit::match boost::spirit::optional::parse(const ScannerT &) const' being compiled 1> with 1> [ 1> S=boost::spirit::chlit, 1> ScannerT=boost::spirit::scanner,std::allocator>,boost::spirit::scanner_policies,boost::spirit::match_policy,boost::spirit::action_policy>> 1> ] 1> d:\users\slava\etap\external\boost\boost\spirit\home\classic\core\composite\sequence.hpp(55) : see reference to function template instantiation 'boost::spirit::match boost::spirit::sequence::parse(const ScannerT &) const' being compiled 1> with 1> [ 1> A=boost::spirit::sequence,boost::spirit::ref_const_ref_actor>>,boost::spirit::optional>,boost::spirit::chlit>,boost::spirit::chlit>>,boost::spirit::ref_value_actor>,boost::spirit::chlit>,boost::spirit::action>,boost::spirit::chlit>,boost::spirit::chlit>>,`anonymous-namespace'::MapInserter>>,boost::spirit::chlit,boost::spirit::no_list_endtoken,boost::spirit::binary_parser_category>>>, 1> B=boost::spirit::optional>, 1> ScannerT=boost::spirit::scanner,std::allocator>,boost::spirit::scanner_policies,boost::spirit::match_policy,boost::spirit::action_policy>> 1> ] 1> d:\users\slava\etap\external\boost\boost\spirit\home\classic\core\composite\impl\directives.ipp(141) : see reference to function template instantiation 'boost::spirit::match boost::spirit::sequence::parse>(const ScannerT &) const' being compiled 1> with 1> [ 1> A=boost::spirit::sequence,boost::spirit::ref_const_ref_actor>>,boost::spirit::optional>,boost::spirit::chlit>,boost::spirit::chlit>>,boost::spirit::ref_value_actor>,boost::spirit::chlit>,boost::spirit::action>,boost::spirit::chlit>,boost::spirit::chlit>>,`anonymous-namespace'::MapInserter>>,boost::spirit::chlit,boost::spirit::no_list_endtoken,boost::spirit::binary_parser_category>>>,boost::spirit::optional>>, 1> B=boost::spirit::action,boost::spirit::ref_value_actor>, 1> IteratorT=std::_String_iterator,std::allocator>, 1> PoliciesT=boost::spirit::scanner_policies,boost::spirit::match_policy,boost::spirit::action_policy>, 1> ScannerT=boost::spirit::scanner,std::allocator>,boost::spirit::scanner_policies,boost::spirit::match_policy,boost::spirit::action_policy>> 1> ] 1> d:\users\slava\etap\external\boost\boost\spirit\home\classic\core\composite\directives.hpp(163) : see reference to function template instantiation 'RT boost::spirit::impl::inhibit_case_parser_parse(const ST &,const ScannerT &,const boost::spirit::iteration_policy &)' being compiled 1> with 1> [ 1> RT=result_t, 1> T=boost::spirit::sequence,boost::spirit::ref_const_ref_actor>>,boost::spirit::optional>,boost::spirit::chlit>,boost::spirit::chlit>>,boost::spirit::ref_value_actor>,boost::spirit::chlit>,boost::spirit::action>,boost::spirit::chlit>,boost::spirit::chlit>>,`anonymous-namespace'::MapInserter>>,boost::spirit::chlit,boost::spirit::no_list_endtoken,boost::spirit::binary_parser_category>>>,boost::spirit::optional>>,boost::spirit::action,boost::spirit::ref_value_actor>>, 1> ScannerT=boost::spirit::scanner,std::allocator>,boost::spirit::scanner_policies<>>, 1> ST=boost::spirit::sequence,boost::spirit::ref_const_ref_actor>>,boost::spirit::optional>,boost::spirit::chlit>,boost::spirit::chlit>>,boost::spirit::ref_value_actor>,boost::spirit::chlit>,boost::spirit::action>,boost::spirit::chlit>,boost::spirit::chlit>>,`anonymous-namespace'::MapInserter>>,boost::spirit::chlit,boost::spirit::no_list_endtoken,boost::spirit::binary_parser_category>>>,boost::spirit::optional>>,boost::spirit::action,boost::spirit::ref_value_actor>> 1> ] 1> d:\users\slava\etap\external\boost\boost\spirit\home\classic\core\impl\parser.ipp(30) : see reference to function template instantiation 'boost::spirit::match boost::spirit::inhibit_case::parse>(const ScannerT &) const' being compiled 1> with 1> [ 1> ParserT=boost::spirit::sequence,boost::spirit::ref_const_ref_actor>>,boost::spirit::optional>,boost::spirit::chlit>,boost::spirit::chlit>>,boost::spirit::ref_value_actor>,boost::spirit::chlit>,boost::spirit::action>,boost::spirit::chlit>,boost::spirit::chlit>>,`anonymous-namespace'::MapInserter>>,boost::spirit::chlit,boost::spirit::no_list_endtoken,boost::spirit::binary_parser_category>>>,boost::spirit::optional>>,boost::spirit::action,boost::spirit::ref_value_actor>>, 1> IteratorT=std::_String_iterator,std::allocator>, 1> PoliciesT=boost::spirit::scanner_policies<>, 1> ScannerT=boost::spirit::scanner,std::allocator>,boost::spirit::scanner_policies<>> 1> ] 1> d:\users\slava\etap\projects\tagged\tgtproc\tgtproc.cpp(1329) : see reference to function template instantiation 'boost::spirit::parse_info boost::spirit::parse,boost::spirit::inhibit_case>(const IteratorT &,const IteratorT &,const boost::spirit::parser &)' being compiled 1> with 1> [ 1> IteratorT=std::_String_iterator,std::allocator>, 1> _Elem=wchar_t, 1> _Traits=std::char_traits, 1> _Alloc=std::allocator, 1> ParserT=boost::spirit::sequence,boost::spirit::ref_const_ref_actor>>,boost::spirit::optional>,boost::spirit::chlit>,boost::spirit::chlit>>,boost::spirit::ref_value_actor>,boost::spirit::chlit>,boost::spirit::action>,boost::spirit::chlit>,boost::spirit::chlit>>,`anonymous-namespace'::MapInserter>>,boost::spirit::chlit,boost::spirit::no_list_endtoken,boost::spirit::binary_parser_category>>>,boost::spirit::optional>>,boost::spirit::action,boost::spirit::ref_value_actor>>, 1> DerivedT=boost::spirit::inhibit_case,boost::spirit::ref_const_ref_actor>>,boost::spirit::optional>,boost::spirit::chlit>,boost::spirit::chlit>>,boost::spirit::ref_value_actor>,boost::spirit::chlit>,boost::spirit::action>,boost::spirit::chlit>,boost::spirit::chlit>>,`anonymous-namespace'::MapInserter>>,boost::spirit::chlit,boost::spirit::no_list_endtoken,boost::spirit::binary_parser_category>>>,boost::spirit::optional>>,boost::spirit::action,boost::spirit::ref_value_actor>>> 1> ] 1>d:\users\slava\etap\external\boost\boost\type_traits\type_with_alignment.hpp(207) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE' 1> with 1> [ 1> x=false 1> ] }}} Increasing struct member alignment to 2 or more bytes solves the problem. The same code gives no errors with boost-1.35.0 even with alignment=1byte.",Bugs,closed,Boost 1.37.0,spirit,Boost 1.36.0,Problem,invalid,,