On 12/14/2013 12:14 PM, Andrey Semashev wrote:
On Sat, Dec 14, 2013 at 8:56 PM, Peter Dimov
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.