
Peter Dimov wrote:
David Abrahams wrote:
Joel de Guzman <joel@boost-consulting.com> writes:
Here's another problem:
std::map<int*, int*> m;
generic code that treats pair<int* int*> as an iterator_range will treat m's data type incorrectly. No, generic code doesn't look at types and say, "which of two concepts with no refinement relationship does this type fulfill?" and then take different actions based on the answer.
Sometimes it does. Consider serialization, or stream output. You could have
if( type is a range )
output sequence of values
else
output something else
Treating pair<pointer, pointer> as a range creates an ambiguity here.
And potentially dangerous too. first and last might not be valid, they may point to separate single elements (e.g. heap objects), or arrays from different locations, or combinations thereof. Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net