[cfe-dev] Usage of __for_bool_ value in __nat {} classes

Li, Zeyang via cfe-dev cfe-dev at lists.llvm.org
Tue Jun 5 18:43:54 PDT 2018


@Eric,

Could you elaborate a bit what it means to move the SFINAE into the
template parameter list? Does it mean the enable_if conversion check could
be moved to the template parameter list and remove the default __nat
parameter? Does that have any performance implication?

I'm really interested to know as I'm writing my own version of shared_ptr
without atomics.
Thanks!

Zeyang

On Wed, Jun 6, 2018 at 7:27 AM, Howard Hinnant <howard.hinnant at gmail.com>
wrote:

> That sounds right to me.
>
> Howard
>
> On Jun 5, 2018, at 4:07 PM, Erik Pilkington <erik.pilkington at gmail.com>
> wrote:
> >
> > Looks like the initial purpose was to implement a poor man's explicit
> operator bool that returned a pointer to member, but it was removed in
> r151088.
> >
> >
> > On 2018-06-05 3:57 PM, Eric Fiselier via cfe-dev wrote:
> >> I'm not sure what the purpose is. I agree it doesn't seem to have any
> effect, and the git blame comes back to the initial commit for libc++.
> >> Changing the layout of `__nat` now would be an ABI break; so that's out
> of the question. But I have some upcoming patches that are going
> >> to remove most usages of it.
> >>
> >> @Howard, do you recall what the purpose of this was? Something to do
> with initializing empty structs maybe?
> >>
> >> /Eric
> >>
> >> On Tue, Jun 5, 2018 at 2:11 AM, Li, Zeyang via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
> >> I was looking through clang's c++ standard library, and found this
> class in the shared_ptr class.
> >>
> >> class shared_ptr
> >> ...
> >> private:
> >>         struct __nat {int __for_bool_;};
> >> ...
> >> };
> >>
> >> and I understand that this class is used to detect whether type
> conversion is possible at compile time, but its member __for_bool_ is never
> used anywhere in the class or the weak_ptr counterpart. So my question is,
> what is the point of __for_bool_, why not simply use an empty class for the
> same purpose?
> >>
> >> I'm sure the standard library authors definitely knows better than me.
> Please help.
> >>
> >> Thanks,
> >> Zeyang
> >>
> >>
> >> _______________________________________________
> >> cfe-dev mailing list
> >> cfe-dev at lists.llvm.org
> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> cfe-dev mailing list
> >>
> >> cfe-dev at lists.llvm.org
> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180606/8fdcad05/attachment.html>


More information about the cfe-dev mailing list