|
Boost : |
From: John Maddock (john_at_[hidden])
Date: 2006-03-16 05:19:08
> Is it really a bug?
> AFAIK, the compiler is ordered to apply template function "distance"
> on two members of the class. The function is const, so the members
> must be const, in this case its final type will be "const char *
> const". So the template deduced automatically will have the type
> "const char * const" as "InputIterator", which is not a valid input
> iterator, as it may not step forward or backward.
There is a rule in template type deduction that the final const gets
dropped:
Given:
template <class T> foo(T z);
Then:
int i;
const int j;
foo(i); // calls foo<int>
foo(j); // also calls foo<int>
This is to ensure consistency with non-template function calls, and also
makes sense once you realise that foo<int> and foo<const int> would have the
same signature and type anyway.
John.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk