Boost logo

Boost :

Subject: Re: [boost] Removing Bind placeholders from the global namespace
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2009-06-14 18:24:24


On Monday 15 June 2009 01:07:28 Peter Dimov wrote:
> Andrey Semashev:
> > Will it break users' code that don't import boost::bind into the global
> > namespace but use placeholders without qualification?
>
> Yes it will. But we can't leave them as they're now because people complain
> of conflicts.

From other posts I got an impression that you are not planning to make these
placeholders interchangeable between different libraries, such as bind and
lambda. If so, then:

* How does moving bind placeholders to boost::placeholders help? People have
to qualify them now, they will still have to qualify them after the change.
* Why boost::placeholders, if these placeholders will be specific to
Boost.Bind?

IMHO, if we're moving to unified placeholders (which is presumable the
ultimate goal), this should be a major change to all involved libraries,
namely, bind, lambda and phoenix at least. A backwards compatibility layer is
a must for such a change, because the named libraries are the ones most
frequently used. Moreover, I'd prefer if the old code compiled without a
change by default (i.e. no BOOST_USE_GLOBAL_PLACEHOLDERS macro needed).

I see another way of doing this. Perhaps, we could create a new functional
library powered by proto that would accumulate features from bind, lambda and
phoenix and release it independently. It could be designed the way we want and
be targeted for recent compilers (IOW, drop hacks for ancient compilers). The
old libraries would become deprecated, they won't change their interface a bit
and will be left for compatibility. Maybe eventually these libraries will
degenerate into a thin interface layers to the new library.


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