Deutsch   English   Français   Italiano  
<874j8yswha.fsf@bsb.me.uk>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder9.news.weretis.net!2.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Ben Bacarisse <ben@bsb.me.uk>
Newsgroups: comp.lang.c
Subject: Re: question about nullptr
Date: Tue, 09 Jul 2024 11:14:41 +0100
Organization: A noiseless patient Spider
Lines: 45
Message-ID: <874j8yswha.fsf@bsb.me.uk>
References: <v6bavg$3pu5i$1@dont-email.me>
	<90c2181ae4c7aac8f17f076093923d5b357c43aa@i2pn2.org>
	<v6bt15$3svoi$1@dont-email.me> <v6iik7$1948o$1@dont-email.me>
	<v6iklk$19cv8$1@dont-email.me> <v6inai$19q6r$1@dont-email.me>
	<v6insm$19uag$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Date: Tue, 09 Jul 2024 12:14:43 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="3bc602097df9bef4fe534cf857153f79";
	logging-data="1426656"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18UPu2szUhl1/iLTfFAEhY7Vkkw8/RyWW0="
User-Agent: Gnus/5.13 (Gnus v5.13)
Cancel-Lock: sha1:mRr2N/FAfBQYNpJKADxPkbs/d3k=
	sha1:ItamCmzlt/b4sgsfQdroTFtEQ3s=
X-BSB-Auth: 1.57e9a00559b0cc94d7b0.20240709111441BST.874j8yswha.fsf@bsb.me.uk
Bytes: 2462

"Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> writes:


> p = nullptr;

(p having been declared void *)

> (0 == p == nullptr == NULL == 0) == true ?
>
> Am I missing something here? If so, here is a preemptive: Shit!

You are missing that 0 == p == nullptr == NULL == 0 does not mean what
you want!  It means

 (((0 == p) == nullptr) == NULL) == 0

and that is a constraint violation.

Why?  Well 0 == p has value 1 and is of type int and equality
comparisons between int and nullptr_t values (of which there is only
one) are not permitted.  Catching this sort of thing is one of the
benefits of nullptr and its associated type nullptr_t.  It means that
while

#define nullptr ((void *)0)

can help to get C23 code to compile with a pre-C23 compiler, it might
result in some C23 constraint violations going undetected.

Anyway, that aside, I know what you meant.  To clarify, all of the
following have the value 1:

  0 == p
  p == nullptr
  nullptr == NULL
  NULL == 0
  0 == nullptr
  !p

Note that 0 == nullptr /is/ allowed even though 0 has type int.  That is
because 0 is also a null pointer constant, and the rules for == and !=
specifically allow it.

-- 
Ben.