>>> Is the documentation under [1] and/or [2] unclear?
>>
>> It is.
>>
>> Method 1 provides information I would have expected to find
>> in the SinglePassRange concept. I'm assuming that the member
>> functions and types would be members of any class modeling
>> SinglePassRange.  I say "assuming becaus it doesn't actually
>> say that.
>>
>> Then...why are you assuming that?
>
> Because the documentation says they are member functions
> but it doesn't say of what type.  One has no choice to guess
> or assume.
 
I re-read this.  Turns out it DOES say that that the member functions
correspond to an instance of a type which models SinglePassRange.
So my assumption was correct - though unnecessary.
 
>> This is also how
>> Boost.Fusion and Boost.MPL (at least) are structured, AFAIK.
>
> I don't think that's accurate.  If you want to make your own model
> of a concept, you just make sure your types implement all the valid
> expressions.
>
>
> Maybe in your world. And maybe your world is the correct one. But
> compare Boost.Fusion's Forward Sequence concept documentation [6]
> with its extension mechanism documentation [7];
 
Damn - I didn't realze the fusion had an extention mechanism for Sequence.
I don't know if this is necessary or some sort of convenience to help
creators "get it right".  Previously I made new algorithms just by
implementing the relevant concept.
 
>> I'm sorry, I'm still not following. Can you be more concrete? I don't
>> know what you mean by building a library "concurrently with the
>> documentation", and I'm not sure what your suggestion about "how to
>> go about these things" actually is.
>
> rsd.com/blincubator.com/advice/
>
>
> page not found
 
Lost a character - rrsd.com/blincubator.com/advice/

>> #include <boost/concept/assert.hpp>
>> #include <boost/range/algorithm/find.hpp>
>> #include <boost/range/concepts.hpp>
>>
>> struct X { };
>>
>> namespace boost
>> {
>> int const * begin(X&);
>> int const * end(X&);
>> } // namespace boost
>>
>> int main(int argc, char* argv[])
>> {
>>   X x;
>>   //boost::find(x, 0); // compiler error
>>   boost::range::find(x, 0); // compiler error
>>   return 0;
>> }
>> --------
>>
>> Same error comes up as in a BOOST_CONCEPT_ASSERT, pointing to a line
>> referencing range_const_iterator and range_mutable_iterator,
>> suggesting that Boost.Range cannot associate an iterator type with X.
 
I compiled this example on both MSVC 9.0 and GCC 4.5.3
 
Failed to compile on MSVC
Compiled with no error on GCC.
 
BTW - my view is that it SHOULD compile without error since
struct X fullfills the requirements of the SinglePassConcept as written
in the documentation.
 
I think my original question was motivated by the fact that it didn't
compile with my MSVC system.  Of course I forget now.

Robert Ramey