id summary reporter owner description type status milestone component version severity resolution keywords cc 4372 spirit::info violates STL container requirements Andrey Semashev Hartmut Kaiser "The spirit::info class contains member value which is a variant with std::list< info > as one of the possible values. This requires the compiler to instantiate std::list on a not-yet-complete type. This breaks compilation with STLPort, the build log is as follows: {{{ C:\_Sources\STLPort\stlport\stl/type_traits.h(249) : error C2139: 'boost::spirit::info' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__has_trivial_constructor' .\boost/spirit/home/support/info.hpp(30) : see declaration of 'boost::spirit::info' C:\_Sources\STLPort\stlport\stl/pointers/_tools.h(76) : see reference to class template instantiation 'stlp_std::__type_traits<_Tp>' being compiled with [ _Tp=boost::spirit::info ] C:\_Sources\STLPort\stlport\stl/pointers/_list.h(61) : see reference to class template instantiation 'stlp_std::priv::_StorageType<_Tp>' being compiled with [ _Tp=boost::spirit::info ] .\boost/mpl/sizeof.hpp(27) : see reference to class template instantiation 'stlp_std::list<_Tp>' being compiled with [ _Tp=boost::spirit::info ] .\boost/mpl/aux_/has_type.hpp(20) : see reference to class template instantiation 'boost::mpl::sizeof_' being compiled with [ T=stlp_std::list ] .\boost/mpl/aux_/preprocessed/plain/quote.hpp(36) : see reference to class template instantiation 'boost::mpl::aux::has_type' being compiled with [ T=boost::mpl::sizeof_> ] .\boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp(39) : see reference to class template instantiation 'boost::mpl::quote1::apply' being compiled with [ F=boost::mpl::sizeof_, Tag=boost::mpl::void_, U1=stlp_std::list ] .\boost/mpl/aux_/preprocessed/plain/bind.hpp(144) : see reference to class template instantiation 'boost::mpl::apply_wrap1' being compiled with [ F=boost::mpl::quote1, T1=stlp_std::list ] .\boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp(39) : see reference to class template instantiation 'boost::mpl::bind1::apply' being compiled with [ F=boost::mpl::quote1, T1=boost::mpl::arg<1>, U1=stlp_std::list ] .\boost/mpl/aux_/preprocessed/plain/bind.hpp(144) : see reference to class template instantiation 'boost::mpl::apply_wrap1' being compiled with [ F=boost::mpl::protect,boost::mpl::arg<1>>>, T1=stlp_std::list ] .\boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp(80) : see reference to class template instantiation 'boost::mpl::bind1::apply' being compiled with [ F=boost::mpl::protect,boost::mpl::arg<1>>>, T1=boost::mpl::_2, U1=boost::mpl::l_end, U2=stlp_std::list, U3=boost::mpl::na, U4=boost::mpl::na, U5=boost::mpl::na ] .\boost/mpl/aux_/preprocessed/plain/bind.hpp(160) : see reference to class template instantiation 'boost::mpl::apply_wrap5' being compiled with [ F=boost::mpl::bind1,boost::mpl::arg<1>>>,boost::mpl::_2>, T1=boost::mpl::l_end, T2=stlp_std::list, T3=boost::mpl::na, T4=boost::mpl::na, T5=boost::mpl::na ] .\boost/mpl/aux_/preprocessed/plain/bind.hpp(206) : see reference to class template instantiation 'boost::mpl::aux::resolve_bind_arg' being compiled with [ T=boost::mpl::bind1,boost::mpl::arg<1>>>,boost::mpl::_2>, U1=boost::mpl::l_end, U2=stlp_std::list, U3=boost::mpl::na, U4=boost::mpl::na, U5=boost::mpl::na ] .\boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp(49) : see reference to class template instantiation 'boost::mpl::bind2::apply' being compiled with [ F=boost::mpl::lambda>::type, T1=boost::mpl::_1, T2=boost::mpl::bind1,boost::mpl::arg<1>>>,boost::mpl::_2>, U1=boost::mpl::l_end, U2=stlp_std::list ] .\boost/mpl/aux_/preprocessed/plain/apply.hpp(63) : see reference to class template instantiation 'boost::mpl::apply_wrap2' being compiled with [ F=boost::mpl::bind2>::type,boost::mpl::_1,boost::mpl::bind1,boost::mpl::arg<1>>>,boost::mpl::_2>>, T1=boost::mpl::l_end, T2=stlp_std::list ] .\boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp(58) : see reference to class template instantiation 'boost::mpl::apply2' being compiled with [ F=boost::mpl::bind2>::type,boost::mpl::_1,boost::mpl::bind1,boost::mpl::arg<1>>>,boost::mpl::_2>>, T1=boost::mpl::l_end, T2=stlp_std::list ] .\boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp(181) : see reference to class template instantiation 'boost::mpl::aux::reverse_fold_impl' being compiled with [ N=1, First=boost::mpl::l_iter,stlp_std::list,boost::mpl::l_end>>, Last=boost::mpl::l_iter, State=boost::mpl::l_end, BackwardOp=boost::mpl::bind2>::type,boost::mpl::_1,boost::mpl::bind1,boost::mpl::arg<1>>>,boost::mpl::_2>>, ForwardOp=boost::mpl::arg<1> ] .\boost/mpl/reverse_fold.hpp(41) : see reference to class template instantiation 'boost::mpl::aux::reverse_fold_impl' being compiled with [ N=5, First=boost::mpl::l_iter,boost::spirit::info::nil,boost::mpl::l_item,stlp_std::basic_string,stlp_std::allocator>,boost::mpl::l_item,boost::recursive_wrapper,boost::mpl::l_item,boost::recursive_wrapper>,boost::mpl::l_item,stlp_std::list,boost::mpl::l_end>>>>>>, Last=boost::mpl::l_iter, State=boost::mpl::l_end, BackwardOp=boost::mpl::bind2>::type,boost::mpl::_1,boost::mpl::bind1,boost::mpl::arg<1>>>,boost::mpl::_2>>, ForwardOp=boost::mpl::arg<1> ] .\boost/mpl/transform.hpp(65) : see reference to class template instantiation 'boost::mpl::reverse_fold' being compiled with [ Sequence=boost::mpl::l_item,boost::spirit::info::nil,boost::mpl::l_item,stlp_std::basic_string,stlp_std::allocator>,boost::mpl::l_item,boost::recursive_wrapper,boost::mpl::l_item,boost::recursive_wrapper>,boost::mpl::l_item,stlp_std::list,boost::mpl::l_end>>>>>, State=boost::mpl::l_end, BackwardOp=boost::mpl::bind2>::type,boost::mpl::_1,boost::mpl::bind1,boost::mpl::arg<1>>>,boost::mpl::_2>> ] .\boost/mpl/transform.hpp(113) : see reference to class template instantiation 'boost::mpl::aux::reverse_transform1_impl' being compiled with [ Seq=boost::mpl::l_item,boost::spirit::info::nil,boost::mpl::l_item,stlp_std::basic_string,stlp_std::allocator>,boost::mpl::l_item,boost::recursive_wrapper,boost::mpl::l_item,boost::recursive_wrapper>,boost::mpl::l_item,stlp_std::list,boost::mpl::l_end>>>>>, Op=boost::mpl::sizeof_, In=boost::mpl::front_inserter::apply,stlp_std::allocator>,boost::recursive_wrapper,boost::recursive_wrapper>,stlp_std::list>>::type> ] .\boost/variant/variant.hpp(121) : see reference to class template instantiation 'boost::mpl::transform1' being compiled with [ P1=boost::mpl::l_item,boost::spirit::info::nil,boost::mpl::l_item,stlp_std::basic_string,stlp_std::allocator>,boost::mpl::l_item,boost::recursive_wrapper,boost::mpl::l_item,boost::recursive_wrapper>,boost::mpl::l_item,stlp_std::list,boost::mpl::l_end>>>>>, P2=boost::mpl::sizeof_ ] .\boost/variant/variant.hpp(233) : see reference to class template instantiation 'boost::detail::variant::max_value' being compiled with [ Sequence=boost::mpl::l_item,boost::spirit::info::nil,boost::mpl::l_item,stlp_std::basic_string,stlp_std::allocator>,boost::mpl::l_item,boost::recursive_wrapper,boost::mpl::l_item,boost::recursive_wrapper>,boost::mpl::l_item,stlp_std::list,boost::mpl::l_end>>>>>, F=boost::mpl::sizeof_ ] .\boost/variant/variant.hpp(1105) : see reference to class template instantiation 'boost::detail::variant::make_storage' being compiled with [ Types=boost::mpl::l_item,boost::spirit::info::nil,boost::mpl::l_item,stlp_std::basic_string,stlp_std::allocator>,boost::mpl::l_item,boost::recursive_wrapper,boost::mpl::l_item,boost::recursive_wrapper>,boost::mpl::l_item,stlp_std::list,boost::mpl::l_end>>>>>, NeverUsesBackupFlag=boost::variant,boost::recursive_wrapper>,stlp_std::list>::has_fallback_type_ ] .\boost/spirit/home/support/info.hpp(69) : see reference to class template instantiation 'boost::variant' being compiled with [ T0_=boost::spirit::info::nil, T1=boost::spirit::utf8_string, T2=boost::recursive_wrapper, T3=boost::recursive_wrapper>, T4=stlp_std::list ] C:\_Sources\STLPort\stlport\stl/type_traits.h(250) : error C2139: 'boost::spirit::info' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__has_trivial_copy' .\boost/spirit/home/support/info.hpp(30) : see declaration of 'boost::spirit::info' C:\_Sources\STLPort\stlport\stl/type_traits.h(251) : error C2139: 'boost::spirit::info' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__has_trivial_assign' .\boost/spirit/home/support/info.hpp(30) : see declaration of 'boost::spirit::info' C:\_Sources\STLPort\stlport\stl/type_traits.h(252) : error C2139: 'boost::spirit::info' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__has_trivial_destructor' .\boost/spirit/home/support/info.hpp(30) : see declaration of 'boost::spirit::info' C:\_Sources\STLPort\stlport\stl/type_traits.h(253) : error C2139: 'boost::spirit::info' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_pod' .\boost/spirit/home/support/info.hpp(30) : see declaration of 'boost::spirit::info' }}} " Bugs closed Boost 1.44.0 spirit Boost Release Branch Showstopper fixed