This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/25185] deep typedef substitution in error message
- From: "dave at boostpro dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 4 Apr 2009 01:33:17 -0000
- Subject: [Bug c++/25185] deep typedef substitution in error message
- References: <bug-25185-501@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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