Subject: Re: [boost] Removing _1 from the global namespace (again)
From: Edward Diener (eldiener_at_[hidden])
Date: 2013-12-14 15:33:42


On 12/14/2013 12:14 PM, Andrey Semashev wrote:
> On Sat, Dec 14, 2013 at 8:56 PM, Peter Dimov <lists_at_[hidden]> wrote:
>> If we're going to call the next release 2.0, we'll be allowed some latitude
>> with respect to breaking changes, so maybe this is the right time to finally
>> remove the Bind placeholders from the global namespace.
>>
>> This will, however, break many things all around Boost (to say nothing about
>> the outside world), as a quick grep can readily reveal. And, consequently,
>> it will generate a certain amount of work for the maintainers of the
>> affected libraries that, from their point of view, can appear unnecessary.
>>
>> So I'll need a certain amount of community consensus before going ahead and
>> breaking everyone's code. :-)
>
> So far I had no problems with the global placeholders and used them
> extensively in my projects. For sure this will cause a lot of headache
> for me. I'd prefer not making this change, unless there is a
> compelling reason for it.

The compelling reason is that if it remains in the global namespace no
other use of '_n' can be conveniently hoisted into the current scope at
the same time via a 'using namespace xxx'. Whereas if it is in its own
namespace, as in retrospect it should have been, then the flexibility of
hoisting the use of '_n' from whatever library, can be preserved.

Its the same as putting any common name into the global namespace from a
library, only to have it easily conflict with other uses of the same
name. It is to be avoided as a matter of good programming principle.

On a practical level other libraries, Boost and otherwise, use the '_n'
notation and this has led to problems and numerous complaints in the
past because of the bind placeholders being in the global namespace.