Relational comparison of void* pointers
7.6.9 [expr.rel]
Paul Keir

Created on 2020-06-15.00:00:00 last changed 2 weeks ago


Date: 2022-11-29.22:21:00

CWG 2022-11-11

Paper N3624 erroneously removed support for void* and function pointer relational comparisons. That ought to be restored.

Possible resolution:

Change in 7.6.9 [expr.rel] paragraph 5 as follows:

... Otherwise, the result of each of the operators is unspecified. [ Note: A relational operator applied to unequal pointers to void or to function pointers yields an unspecified result. -- end note ]
Date: 2020-06-15.00:00:00

Prior to the adoption of paper N3624 (resolving issue 1512), comparison of void* pointers was explicitly unspecified. The current wording of 7.6.9 [expr.rel], however, describes only comparison of “pointers to objects” (paragraphs 4 and 5), but a pointer to void is not a pointer to an object, only an object pointer type (as opposed to a function pointer type). Formally, that means that comparing void* pointers is undefined behavior, which seems undesirable.

As a related note, there is implementation divergence over whether relational comparisons of void* pointers are accepted in constant expressions (when the void* values are converted from pointers that would otherwise be comparable in constant expressions).

Date User Action Args
2022-11-20 07:54:16adminsetmessages: + msg7050
2022-11-20 07:54:16adminsetstatus: open -> drafting
2020-06-15 00:00:00admincreate