RFR (M): 8184334: Generalizing Atomic with templates

Andrew Haley aph at redhat.com
Fri Aug 4 08:54:02 UTC 2017


On 04/08/17 00:42, David Holmes wrote:
> On 4/08/2017 5:27 AM, Kim Barrett wrote:
>> However, there are use-cases that I think are reasonable which don't
>> immediately fit that restriction.
>> (1) cmpxchg(v, p, NULL), to store a pointer if no pointer is already
>> present.  This can be used as an alternative to DCLP. One way to deal
> I thought NULL (aka 0 in a pointer context) was assignable to any 
> pointer type without any casts. ??

They are, but you have to distinguish between default conversions
and overload resolution.  If you have two methods

int a(foo *p);
int a(bar *p);

and you have a call


the only way to resolve the overload is to do this:


or this:

foo *tmp = NULL;

C++ is pretty strict about this rule, because it's safer in practice
to insist that programmers say exactly what they mean than apply
conversions that might be surprising.  In several places C++ is
fussier than C.  For example, you can say this in C but not C++:

   foo *p = malloc(n);

This is a deliberate design deicison.

Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671

More information about the hotspot-dev mailing list