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 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: <90c2181ae4c7aac8f17f076093923d5b357c43aa@i2pn2.org> 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" 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.