Why boost::bind insists pulling `boost::placeholders` into global namespace?
up vote
3
down vote
favorite
The following code can be fixed easily, but quite annoying.
#include <functional>
#include <boost/bind.hpp>
void foo() {
using namespace std::placeholders;
std::bind(_1, _2, _3); // ambiguous
}
There's a macro BOOST_BIND_NO_PLACEHOLDERS
, but using this macro will also bring some drawbacks like causing boost::placeholders
disappear from the compile unit included <boost/bind.hpp>
but not included <boost/bind/placeholders.hpp>
.
The name conflicts also comes with other libs like boost::mpl
, I don't think the maintainers don't know the problem, but I want to know why they insist on not deprecating and deleting using namespace boost::placeholders
in <boost/bind.hpp>
.
c++ boost namespaces
add a comment |
up vote
3
down vote
favorite
The following code can be fixed easily, but quite annoying.
#include <functional>
#include <boost/bind.hpp>
void foo() {
using namespace std::placeholders;
std::bind(_1, _2, _3); // ambiguous
}
There's a macro BOOST_BIND_NO_PLACEHOLDERS
, but using this macro will also bring some drawbacks like causing boost::placeholders
disappear from the compile unit included <boost/bind.hpp>
but not included <boost/bind/placeholders.hpp>
.
The name conflicts also comes with other libs like boost::mpl
, I don't think the maintainers don't know the problem, but I want to know why they insist on not deprecating and deleting using namespace boost::placeholders
in <boost/bind.hpp>
.
c++ boost namespaces
I really think you should file a bug report and see how it goes. Best case scenario: it's fix. Bad case scenario : it's not fixed but you got a reason why. Worst case scenario: nothing happens.
– YSC
Nov 8 at 9:06
I think it has something to do with backwards compatibility. Back in the days when boost::bind was invented there was no constexpr and/or other technics. So they decided to put placeholders into global space. With the current standard it is possible to have them in an namespace. However, removing from global namespace would break a lot of code -> (ugly) workaround solution:using namespace boost::placeholders;
.
– user1810087
Nov 8 at 9:18
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
The following code can be fixed easily, but quite annoying.
#include <functional>
#include <boost/bind.hpp>
void foo() {
using namespace std::placeholders;
std::bind(_1, _2, _3); // ambiguous
}
There's a macro BOOST_BIND_NO_PLACEHOLDERS
, but using this macro will also bring some drawbacks like causing boost::placeholders
disappear from the compile unit included <boost/bind.hpp>
but not included <boost/bind/placeholders.hpp>
.
The name conflicts also comes with other libs like boost::mpl
, I don't think the maintainers don't know the problem, but I want to know why they insist on not deprecating and deleting using namespace boost::placeholders
in <boost/bind.hpp>
.
c++ boost namespaces
The following code can be fixed easily, but quite annoying.
#include <functional>
#include <boost/bind.hpp>
void foo() {
using namespace std::placeholders;
std::bind(_1, _2, _3); // ambiguous
}
There's a macro BOOST_BIND_NO_PLACEHOLDERS
, but using this macro will also bring some drawbacks like causing boost::placeholders
disappear from the compile unit included <boost/bind.hpp>
but not included <boost/bind/placeholders.hpp>
.
The name conflicts also comes with other libs like boost::mpl
, I don't think the maintainers don't know the problem, but I want to know why they insist on not deprecating and deleting using namespace boost::placeholders
in <boost/bind.hpp>
.
c++ boost namespaces
c++ boost namespaces
asked Nov 8 at 8:32
user2709407
958
958
I really think you should file a bug report and see how it goes. Best case scenario: it's fix. Bad case scenario : it's not fixed but you got a reason why. Worst case scenario: nothing happens.
– YSC
Nov 8 at 9:06
I think it has something to do with backwards compatibility. Back in the days when boost::bind was invented there was no constexpr and/or other technics. So they decided to put placeholders into global space. With the current standard it is possible to have them in an namespace. However, removing from global namespace would break a lot of code -> (ugly) workaround solution:using namespace boost::placeholders;
.
– user1810087
Nov 8 at 9:18
add a comment |
I really think you should file a bug report and see how it goes. Best case scenario: it's fix. Bad case scenario : it's not fixed but you got a reason why. Worst case scenario: nothing happens.
– YSC
Nov 8 at 9:06
I think it has something to do with backwards compatibility. Back in the days when boost::bind was invented there was no constexpr and/or other technics. So they decided to put placeholders into global space. With the current standard it is possible to have them in an namespace. However, removing from global namespace would break a lot of code -> (ugly) workaround solution:using namespace boost::placeholders;
.
– user1810087
Nov 8 at 9:18
I really think you should file a bug report and see how it goes. Best case scenario: it's fix. Bad case scenario : it's not fixed but you got a reason why. Worst case scenario: nothing happens.
– YSC
Nov 8 at 9:06
I really think you should file a bug report and see how it goes. Best case scenario: it's fix. Bad case scenario : it's not fixed but you got a reason why. Worst case scenario: nothing happens.
– YSC
Nov 8 at 9:06
I think it has something to do with backwards compatibility. Back in the days when boost::bind was invented there was no constexpr and/or other technics. So they decided to put placeholders into global space. With the current standard it is possible to have them in an namespace. However, removing from global namespace would break a lot of code -> (ugly) workaround solution:
using namespace boost::placeholders;
.– user1810087
Nov 8 at 9:18
I think it has something to do with backwards compatibility. Back in the days when boost::bind was invented there was no constexpr and/or other technics. So they decided to put placeholders into global space. With the current standard it is possible to have them in an namespace. However, removing from global namespace would break a lot of code -> (ugly) workaround solution:
using namespace boost::placeholders;
.– user1810087
Nov 8 at 9:18
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53203970%2fwhy-boostbind-insists-pulling-boostplaceholders-into-global-namespace%23new-answer', 'question_page');
}
);
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
I really think you should file a bug report and see how it goes. Best case scenario: it's fix. Bad case scenario : it's not fixed but you got a reason why. Worst case scenario: nothing happens.
– YSC
Nov 8 at 9:06
I think it has something to do with backwards compatibility. Back in the days when boost::bind was invented there was no constexpr and/or other technics. So they decided to put placeholders into global space. With the current standard it is possible to have them in an namespace. However, removing from global namespace would break a lot of code -> (ugly) workaround solution:
using namespace boost::placeholders;
.– user1810087
Nov 8 at 9:18