Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2005-04-07 10:56:19


"Thorsten Ottosen" <nesotto_at_[hidden]> writes:

> "David Abrahams" <dave_at_[hidden]> wrote in message
> news:usm2379fu.fsf_at_boost-consulting.com...
> | "Thorsten Ottosen" <nesotto_at_[hidden]> writes:
> |
> | > "David Abrahams" <dave_at_[hidden]> wrote in message
> | > news:u1x9nzw3b.fsf_at_boost-consulting.com...
> | > | "Thorsten Ottosen" <nesotto_at_[hidden]> writes:
>
> | > just consider that all of the begin()'s may have an unconstrained
> | > primary template version. all three is going to match.
> |
> | How likely is that? It doesn't seem bery likely to me. foo::begin
> | will almost certainly be more specific.
>
> who knows.

Well, we're doing this design completely based on speculation, so you
have to make some educated guesses in order to proceed.

> | I don't think you mean "primary template," do you? You're not talking
> | about using function template specialization are you?
>
> I just meant they all have a default version (the primary template)
> like
>
> template <class T >
> some_thing begin( T& r );

That's a misuse of the term "primary template," which has a specific
technical meaning. Why not just say "fully general overload?"

> | > | > begin() is a bad customization point
> | > |
> | > | I'm not sure of that anymore. Conflicts caused by GCC can be
> | > | misleading. And now that we know how to properly isolate types
> | >
> | > you mean by namespaces?
> |
> | Yes.
>
> then consider a TU where somebody writes
>
> using namespace boost;
> using namespace std;
> using namespace foo;

What about it? ADL doesn't look through using-directives.
Furthermore, using-directives are (almost officially) discouraged
except for migrating old code.

> | > | to prevent unintended ADL, I think it's even less of a problem.
> | >
> | > IMO there is no such thing as unintended ADL during a call to
> | > boost::begin(). you always want it.
> |
> | By "unintended ADL" I mean what happens when the author of the begin()
> | function that ends up getting called never intended it to be found via
> | ADL for that particular argument type. I suppose I should have
> | written "unintended argument-dependent matching" or something.
>
> hm...I simply can't imagine somebody wanting that ADL should not
> kick in.

I don't see how you can say that and also worry about the "ADL lookup
problem." It has to be one or the other.

> If only the language had built-in capabilities for to enable both
> ADL and qualified syntax...

What would the point of qualification be if the actual function found
might be in some other namespace?

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk