It matters because the `Buffer` class can be specialized for some
template parameter values, and those specialization will not necessarily
have the `overflowed_` member, or whatever.
We say that these expressions /depend/ on the template parameters.
A good way to deal with it is to add
using Base = Buffer<Size_>;
using Base::overflowed_;
Or you can qualify each usage, which is at odds with the principle of
not repeating yourself needlessly.
Visual C++ is more lenient because it follows the pre-standard single
phase template parsing rules (disclaimer: I no longer remember the
details of this, I'd have to look it up). I.e. g++ is more conforming
and hence, IMO., more impractical. For I can't remember any single
occasion where this required nonsense verbosity has saved my code from
being incompatible with a nasty specialization of a base class template.
> [snip]
Cheers & hth.,
- Alf