------- Comment #20 from dave at boostpro dot com 2009-04-04 01:33 ------- Subject: Re: deep typedef substitution in error message
on Fri Apr 03 2009, "jason at gcc dot gnu dot org" <gcc-bugzilla-AT-gcc.gnu.org> wrote: > ------- Comment #19 from jason at gcc dot gnu dot org 2009-04-03 21:45 > ------- > Fixing that issue (we weren't canonicalizing deduced type arguments) and also > catching typedefs that aren't typenames gives > > ../../../../boost/sequence/make_range.hpp:60: instantiated from > Âboost::sequence::detail::range_maker<Elements, Begin, End, CalcSize>::type > boost::sequence::detail::range_maker<Elements, Begin, End, > CalcSize>::operator()(const L&, const B&, const E&, const C&) const [with L = > boost::sequence::identity_property_map; B = char*; E = char*; C = > boost::sequence::detail::size_difference<boost::array<char, 11u>, const > boost::array<char, 6u> >; Elements = boost::sequence::identity_property_map; > Begin = char*; End = char*; CalcSize = > boost::sequence::detail::size_difference<boost::array<char, 11u>, > boost::array<char, 6u> >; boost::sequence::detail::range_maker<Elements, > Begin, > End, CalcSize>::type = > boost::sequence::range_::range<boost::sequence::identity_property_map, char*, > char*, mpl_::integral_c<unsigned int, 5u> >; typename > boost::result_of<CalcSize()>::type = mpl_::integral_c<unsigned int, 5u>]Â > > Does that look better? Hum, let me try to reformat that so I can understand it ../../../../boost/sequence/make_range.hpp:60: instantiated from boost::sequence::detail::range_maker<Elements, Begin, End, CalcSize>::type boost::sequence::detail::range_maker< Elements, Begin, End, CalcSize >::operator()(const L&, const B&, const E&, const C&) const [with L = boost::sequence::identity_property_map; B = char*; E = char*; C = boost::sequence::detail::size_difference< boost::array<char, 11u>, const boost::array<char, 6u> >; Elements = boost::sequence::identity_property_map; Begin = char*; End = char*; CalcSize = boost::sequence::detail::size_difference< boost::array<char, 11u>, boost::array<char, 6u> >; boost::sequence::detail::range_maker<Elements, Begin, End, CalcSize>::type = boost::sequence::range_::range< boost::sequence::identity_property_map, char*, char*, mpl_::integral_c<unsigned int, 5u> >; typename boost::result_of<CalcSize()>::type = mpl_::integral_c<unsigned int, 5u> ] Well, I find that a little confusing. Why is it explaining to me what typename boost::result_of<CalcSize()>::type is? I don't see that type anywhere else in there. Also, I'm not thrilled that boost::sequence::detail::range_maker<Elements, Begin, End, CalcSize>::type is still present in the signature, even if it's explained below. Carried to an extreme, you get EDG's nasty nested ={...={...={...}}} type descriptions. Do you need to do that? Why not just spell out the return type? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25185