[Boost-bugs] [Boost C++ Libraries] #4372: spirit::info violates STL container requirements

Subject: [Boost-bugs] [Boost C++ Libraries] #4372: spirit::info violates STL container requirements
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2010-06-24 12:14:29


#4372: spirit::info violates STL container requirements
----------------------------------+-----------------------------------------
 Reporter: andysem | Owner: hkaiser
     Type: Bugs | Status: new
Milestone: Boost 1.44.0 | Component: spirit
  Version: Boost Release Branch | Severity: Showstopper
 Keywords: |
----------------------------------+-----------------------------------------
 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_<T>' being compiled
         with
         [
             T=stlp_std::list<boost::spirit::info>
         ]
         .\boost/mpl/aux_/preprocessed/plain/quote.hpp(36) : see reference
 to class template instantiation 'boost::mpl::aux::has_type<T>' being
 compiled
         with
         [
             T=boost::mpl::sizeof_<stlp_std::list<boost::spirit::info>>
         ]
         .\boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp(39) : see
 reference to class template instantiation
 'boost::mpl::quote1<F,Tag>::apply<U1>' being compiled
         with
         [
             F=boost::mpl::sizeof_,
             Tag=boost::mpl::void_,
             U1=stlp_std::list<boost::spirit::info>
         ]
         .\boost/mpl/aux_/preprocessed/plain/bind.hpp(144) : see reference
 to class template instantiation 'boost::mpl::apply_wrap1<F,T1>' being
 compiled
         with
         [
             F=boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,
             T1=stlp_std::list<boost::spirit::info>
         ]
         .\boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp(39) : see
 reference to class template instantiation
 'boost::mpl::bind1<F,T1>::apply<U1>' being compiled
         with
         [
             F=boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,
             T1=boost::mpl::arg<1>,
             U1=stlp_std::list<boost::spirit::info>
         ]
         .\boost/mpl/aux_/preprocessed/plain/bind.hpp(144) : see reference
 to class template instantiation 'boost::mpl::apply_wrap1<F,T1>' being
 compiled
         with
         [
 F=boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,boost::mpl::arg<1>>>,
             T1=stlp_std::list<boost::spirit::info>
         ]
         .\boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp(80) : see
 reference to class template instantiation
 'boost::mpl::bind1<F,T1>::apply<U1,U2,U3,U4,U5>' being compiled
         with
         [
 F=boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,boost::mpl::arg<1>>>,
             T1=boost::mpl::_2,
             U1=boost::mpl::l_end,
             U2=stlp_std::list<boost::spirit::info>,
             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<F,T1,T2,T3,T4,T5>' being compiled
         with
         [
 F=boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,boost::mpl::arg<1>>>,boost::mpl::_2>,
             T1=boost::mpl::l_end,
             T2=stlp_std::list<boost::spirit::info>,
             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<T,U1,U2,U3,U4,U5>' being compiled
         with
         [
 T=boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,boost::mpl::arg<1>>>,boost::mpl::_2>,
             U1=boost::mpl::l_end,
             U2=stlp_std::list<boost::spirit::info>,
             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<F,T1,T2>::apply<U1,U2>' being compiled
         with
         [
 F=boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::type,
             T1=boost::mpl::_1,
 T2=boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,boost::mpl::arg<1>>>,boost::mpl::_2>,
             U1=boost::mpl::l_end,
             U2=stlp_std::list<boost::spirit::info>
         ]
         .\boost/mpl/aux_/preprocessed/plain/apply.hpp(63) : see reference
 to class template instantiation 'boost::mpl::apply_wrap2<F,T1,T2>' being
 compiled
         with
         [
 F=boost::mpl::bind2<boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,boost::mpl::arg<1>>>,boost::mpl::_2>>,
             T1=boost::mpl::l_end,
             T2=stlp_std::list<boost::spirit::info>
         ]
         .\boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp(58) :
 see reference to class template instantiation
 'boost::mpl::apply2<F,T1,T2>' being compiled
         with
         [
 F=boost::mpl::bind2<boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,boost::mpl::arg<1>>>,boost::mpl::_2>>,
             T1=boost::mpl::l_end,
             T2=stlp_std::list<boost::spirit::info>
         ]
         .\boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp(181) :
 see reference to class template instantiation
 'boost::mpl::aux::reverse_fold_impl<N,First,Last,State,BackwardOp,ForwardOp>'
 being compiled
         with
         [
             N=1,
 First=boost::mpl::l_iter<boost::mpl::l_item<boost::mpl::long_<1>,stlp_std::list<boost::spirit::info>,boost::mpl::l_end>>,
             Last=boost::mpl::l_iter<boost::mpl::l_end>,
             State=boost::mpl::l_end,
 BackwardOp=boost::mpl::bind2<boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,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<N,First,Last,State,BackwardOp,ForwardOp>'
 being compiled
         with
         [
             N=5,
 First=boost::mpl::l_iter<boost::mpl::l_item<boost::mpl::long_<5>,boost::spirit::info::nil,boost::mpl::l_item<boost::mpl::long_<4>,stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,boost::mpl::l_item<boost::mpl::long_<3>,boost::recursive_wrapper<boost::spirit::info>,boost::mpl::l_item<boost::mpl::long_<2>,boost::recursive_wrapper<stlp_std::pair<boost::spirit::info,boost::spirit::info>>,boost::mpl::l_item<boost::mpl::long_<1>,stlp_std::list<boost::spirit::info>,boost::mpl::l_end>>>>>>,
             Last=boost::mpl::l_iter<boost::mpl::l_end>,
             State=boost::mpl::l_end,
 BackwardOp=boost::mpl::bind2<boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,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<Sequence,State,BackwardOp>' being
 compiled
         with
         [
 Sequence=boost::mpl::l_item<boost::mpl::long_<5>,boost::spirit::info::nil,boost::mpl::l_item<boost::mpl::long_<4>,stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,boost::mpl::l_item<boost::mpl::long_<3>,boost::recursive_wrapper<boost::spirit::info>,boost::mpl::l_item<boost::mpl::long_<2>,boost::recursive_wrapper<stlp_std::pair<boost::spirit::info,boost::spirit::info>>,boost::mpl::l_item<boost::mpl::long_<1>,stlp_std::list<boost::spirit::info>,boost::mpl::l_end>>>>>,
             State=boost::mpl::l_end,
 BackwardOp=boost::mpl::bind2<boost::mpl::lambda<boost::mpl::push_front<boost::mpl::na,boost::mpl::na>>::type,boost::mpl::_1,boost::mpl::bind1<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<boost::mpl::sizeof_,boost::mpl::void_>,boost::mpl::arg<1>>>,boost::mpl::_2>>
         ]
         .\boost/mpl/transform.hpp(113) : see reference to class template
 instantiation 'boost::mpl::aux::reverse_transform1_impl<Seq,Op,In>' being
 compiled
         with
         [
 Seq=boost::mpl::l_item<boost::mpl::long_<5>,boost::spirit::info::nil,boost::mpl::l_item<boost::mpl::long_<4>,stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,boost::mpl::l_item<boost::mpl::long_<3>,boost::recursive_wrapper<boost::spirit::info>,boost::mpl::l_item<boost::mpl::long_<2>,boost::recursive_wrapper<stlp_std::pair<boost::spirit::info,boost::spirit::info>>,boost::mpl::l_item<boost::mpl::long_<1>,stlp_std::list<boost::spirit::info>,boost::mpl::l_end>>>>>,
             Op=boost::mpl::sizeof_<boost::mpl::_1>,
 In=boost::mpl::front_inserter<boost::mpl::clear_impl<boost::mpl::aux::list_tag>::apply<boost::mpl::list5<boost::spirit::info::nil,stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,boost::recursive_wrapper<boost::spirit::info>,boost::recursive_wrapper<stlp_std::pair<boost::spirit::info,boost::spirit::info>>,stlp_std::list<boost::spirit::info>>>::type>
         ]
         .\boost/variant/variant.hpp(121) : see reference to class template
 instantiation 'boost::mpl::transform1<P1,P2>' being compiled
         with
         [
 P1=boost::mpl::l_item<boost::mpl::long_<5>,boost::spirit::info::nil,boost::mpl::l_item<boost::mpl::long_<4>,stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,boost::mpl::l_item<boost::mpl::long_<3>,boost::recursive_wrapper<boost::spirit::info>,boost::mpl::l_item<boost::mpl::long_<2>,boost::recursive_wrapper<stlp_std::pair<boost::spirit::info,boost::spirit::info>>,boost::mpl::l_item<boost::mpl::long_<1>,stlp_std::list<boost::spirit::info>,boost::mpl::l_end>>>>>,
             P2=boost::mpl::sizeof_<boost::mpl::_1>
         ]
         .\boost/variant/variant.hpp(233) : see reference to class template
 instantiation 'boost::detail::variant::max_value<Sequence,F>' being
 compiled
         with
         [
 Sequence=boost::mpl::l_item<boost::mpl::long_<5>,boost::spirit::info::nil,boost::mpl::l_item<boost::mpl::long_<4>,stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,boost::mpl::l_item<boost::mpl::long_<3>,boost::recursive_wrapper<boost::spirit::info>,boost::mpl::l_item<boost::mpl::long_<2>,boost::recursive_wrapper<stlp_std::pair<boost::spirit::info,boost::spirit::info>>,boost::mpl::l_item<boost::mpl::long_<1>,stlp_std::list<boost::spirit::info>,boost::mpl::l_end>>>>>,
             F=boost::mpl::sizeof_<boost::mpl::_1>
         ]
         .\boost/variant/variant.hpp(1105) : see reference to class
 template instantiation
 'boost::detail::variant::make_storage<Types,NeverUsesBackupFlag>' being
 compiled
         with
         [
 Types=boost::mpl::l_item<boost::mpl::long_<5>,boost::spirit::info::nil,boost::mpl::l_item<boost::mpl::long_<4>,stlp_std::basic_string<char,stlp_std::char_traits<char>,stlp_std::allocator<char>>,boost::mpl::l_item<boost::mpl::long_<3>,boost::recursive_wrapper<boost::spirit::info>,boost::mpl::l_item<boost::mpl::long_<2>,boost::recursive_wrapper<stlp_std::pair<boost::spirit::info,boost::spirit::info>>,boost::mpl::l_item<boost::mpl::long_<1>,stlp_std::list<boost::spirit::info>,boost::mpl::l_end>>>>>,
 NeverUsesBackupFlag=boost::variant<boost::spirit::info::nil,boost::spirit::utf8_string,boost::recursive_wrapper<boost::spirit::info>,boost::recursive_wrapper<stlp_std::pair<boost::spirit::info,boost::spirit::info>>,stlp_std::list<boost::spirit::info>>::has_fallback_type_
         ]
         .\boost/spirit/home/support/info.hpp(69) : see reference to class
 template instantiation 'boost::variant<T0_,T1,T2,T3,T4>' being compiled
         with
         [
             T0_=boost::spirit::info::nil,
             T1=boost::spirit::utf8_string,
             T2=boost::recursive_wrapper<boost::spirit::info>,
 T3=boost::recursive_wrapper<stlp_std::pair<boost::spirit::info,boost::spirit::info>>,
             T4=stlp_std::list<boost::spirit::info>
         ]
 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'
 }}}

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/4372>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:03 UTC