Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2007-04-27 15:24:17

Doug Gregor wrote:
>> The other problem is:
>> ../boost/xpressive/detail/core/state.hpp:95: error: declaration of
>> 'typedef struct boost::xpressive::detail::match_context<BidiIter>
>> boost::xpressive::detail::match_state<BidiIter>::match_context'
>> ../boost/xpressive/detail/core/state.hpp:33: error: changes meaning of
>> 'match_context' from 'struct
>> boost::xpressive::detail::match_context<BidiIter>'
> The bug also occurs on mainline GCC 4.3 (without my changes), so
> please report it to the Bugzilla system on Here's a
> shorter test case:
> template<typename Iter> struct match_context { };
> template<typename BidIter>
> struct match_state
> {
> typedef match_context<BidIter> match_context;
> };

Huh, they say it's not a bug.

------- Comment #1 from pinskia at gcc dot gnu dot org 2007-04-27 20:16
No, the error message is correct. You change the meaning of
match_context in
the class.

     typedef ::match_context<BidIter> match_context;

Fixes the source to be valid C++. Note C++ does not really require a
diagnostic here (it is one of the invalid code that C++ does not require

Seems odd to me, but I don't have time to dig in the standard right now. 
GCC 4.3 is the only compiler that complains about this. Even Comeau 
accepts it.
Eric Niebler
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at