|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2006-06-19 17:36:53
Ken MacKay wrote:
> I found that I can use bind without specifying the boost namespace
> when a placeholder (eg, _1) is used. If I don't use a placeholder in
> the bind expression, then the compiler properly complains that "bind"
> is undeclared. I am using gcc 3.3.5 on QNX 6.3.2.
>
> Example program (compiles, but it shouldn't):
>
> #include <boost/function.hpp>
> #include <boost/bind.hpp>
>
> void something(int i, int j)
> {
> }
>
> int main()
> {
> boost::function<void (int)> f = bind(&something, 0, _1);
> return 0;
> }
This behavior is caused by a C++ rule known as argument-dependent lookup
(ADL) or Koenig lookup. In an expression of the form f(x, y), f is (also)
looked up in the ("associated") namespaces of x and y. Since _1 is usually
of type boost::arg<1>, boost is an associated namespace for it and the
function "bind" is found without an explicit boost:: qualification.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk