Re: Ambiguous call
Vladimir Grigoriev wrote:
There is a function template in the std namespace. And a function with the
same name is defined in a program. Is it correct that the compiler issues an
error about ambiguous call then the function is called without std:: prefix?
For example
#include <functional>
template <typename InputIterator, typename T>
inline const T accumulate( Input Iterator first, InputIterator last, const T
&val )
{
T result = val;
for ( ; first != last; ++first )
{
result = result + *first;
}
return ( result );
}
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<int> vi;
...
int sum = accumulate( vi.begin(), vi.end(), 0 ); // <== here is the
error
...
return 0;
}
Vladimir Grigoriev
See ADL (nickname "Koenig lookup") - namespace 'std' is added to the
lookup areas because of the arguments (which are of types declared in
'std'). At least that's how I understand it. If you want to limit the
lookup to global namespace only, qualify your name:
int sum = ::accumulate( ...
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask