From: Thorsten Ottosen (nesotto_at_[hidden])
Date: 2004-09-03 10:24:06
| "Thorsten Ottosen" <nesotto_at_[hidden]> writes:
| > "David Abrahams" <dave_at_[hidden]> wrote in message news:ur7pkurnp.fsf_at_boost-consulting.com...
| > apart from the adl stuff, it already is like that. Did you mean to
| > put in the range namespace to avoid problems with classes in boost?
| No, I mean so that the concept can be described in terms of
| boost::range and Collection can become a refinement of Range.
| > | Then you change the Range concept to require that
| > | boost::range::begin(col) works.
| > hm...yeah...one could perhaps state both syntaxes as part of the concept, eg
| > Valid expressions
| > ============
| > begin( a )
| > or
| > a.begin()
| No, you have to say boost::range::begin(col). Otherwise they could
| make a.begin() valid but begin(a) invalid, and that would break
I don't like this circular dependency on the concepts: Range has a special meaning
if the argument is a Collection, yet Collection is supposed to refine Range.
| > perhaps the Range concept could specify
| > Primary Template Behavior
| > ==================
| > return a.begin()
| > ?
| What do primary templates have to do with this?
it is the behavior of the primary template that makes coillections act as Ranges.
| > And maybe we don't have to talk about collection as a refinement;
| > maybe a new term is in order, like "act", sa in "all Collections may
| > act as Ranges".
| ... provided that "..."
| Or, we could say that certain refinements of Collection are also
| refinements of Range.
hm...it doesn't sound right, does it?
described the idea of external and internal versions of concept, roughly correponding to
whether functions are free-standing or members. In that terminology, we could say
1. Collection would be a refinement of InternalRange
2. ExternalRange will, by definition, work with all corresponding InternalRange