|
Boost Users : |
From: David Abrahams (dave_at_[hidden])
Date: 2005-03-09 13:39:08
"Peter Dimov" <pdimov_at_[hidden]> writes:
> David Abrahams wrote:
>> "Peter Dimov" <pdimov_at_[hidden]> writes:
>>
>>> We haven't seen identifier clashes in practice either. ;-) No, g++
>>> doesn't count.
>>
>> So maybe we should put everything in the global namespace?
>
> It is actually not _that_ unreasonable to put ADL customization point
> defaults in the global namespace and dispense with the "using" idiom.
> Moderately unreasonable, maybe. :-)
So let's talk about that:
template <class T>
T* get_pointer(T*);
namespace foo
{
struct A {};
A* get_pointer(A const&);
template <class T>
T f(T const& x)
{
return get_pointer(x);
}
}
namespace bar
{
template <class T>
T f(T const& x)
{
return get_pointer(x);
}
}
int x;
int* q = bar::f(&x);
int* p = foo::f(&x); // problem
As long as you go with the "Herb Sutter Rule" of isolating types and
their ADL functions in their own namespace, these problems disappear.
template <class T>
T* get_pointer(T*);
namespace foo
{
namespace baz //
{ //
struct A {}; // <= Here
A* get_pointer(A const&); //
} //
using baz::A; //
template <class T>
T f(T const& x)
{
return get_pointer(x);
}
}
namespace bar
{
template <class T>
T f(T const& x)
{
return get_pointer(x);
}
}
int x;
int* q = bar::f(&x);
int* p = foo::f(&x); Okay
IIUC, we have two^H^H^Hthree reasons for using the idiom where ADL is
dispatched to a long ugly name (e.g. adl_end, only not that name ;->)
that does the actual work:
[Do we call this pattern the static template method?]
1. GCC
2. Builtin types.
3. Default behaviors
Not sure if 2 and 3 are really the same reason; they might be. I sure
don't want people to have to remember different techniques for
invoking these things based on whether there's a default or they apply
to builtins.
Say, wait: every ADL function with a default currently belongs to some
library, or at least to some namespace. That's the namespace with
which we qualify the name in the using declaration!
-- Dave Abrahams Boost Consulting www.boost-consulting.com
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net