$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [config] Macro for null pointer
From: Nathan Crookston (nathan.crookston_at_[hidden])
Date: 2012-12-05 11:59:58
Andrey Semashev wrote:
> Felipe Magno de Almeida wrote:
>
>> Andrey Semashev wrote:
>> > Eric Niebler wrote:
>>
>> [snip]
>>
>> >> ... and Microsoft's min/max macros cause no problems because they can
>> be
>> >> disabled with NOMINMAX. :-P
>> >
>> > I don't see how this is related. We're not making nullptr a macro, it
>> > still obeys scoping rules.
>>
>> If it is global, then it is all scopes. And it can't even be qualified,
>> because
>> nullptr is never used qualified in user code.
>>
>
> I find reiterating myself. Yes, it is global but it's not a macro. The
> global using declaration is optional and can be disabled if there's another
> global nullptr available (a very slim probability). Other than the global
> import, it does not conflict with any other implementation (i.e. in another
> scope).
>
> So, is there a use case that is broken with this approach that I'm missing?
>
I would be concerned if I were using a library (A) which used boost.nullptr
and another library (B) which shipped its own, potentially at global scope.
I can disable the global using declaration, but if library A is using it
unqualified, as suggested, then wouldn't I need to update that library's
code? Or would they be required to check for the disabling macro?
I wonder if it wouldn't be better to have something like the following:
namespace boost
{
namespace detail
{
class nullptr_t {...};
}
#ifdef BOOST_CXX11_NO_NULLPTR
typedef boost::detail::nullptr_t nullptr_t;
#else
typedef std::nullptr_t nullptr_t;
#endif
namespace
{
const boost::detail::nullptr_t nullptr_ = {};
}
}//end boost
And user code would use boost::nullptr_ of type boost::nullptr_t.
It's not as nice as using straight nullptr, but I think it will
interoperate better, since we're not constrained to suggest using it
unqualified due to the nullptr keyword.
Nate