From 1230298507831610703
X-Google-Language: ENGLISH,ASCII-7-bit
X-Google-Thread: f78e5,e94695845965b249
X-Google-Attributes: gidf78e5,public
X-Google-ArrivalTime: 1992-12-19 15:59:34 PST
Path: sparky!uunet!spool.mu.edu!olivea!hal.com!darkstar.UCSC.EDU!daniel
From: daniel@cse.ucsc.edu (Daniel R. Edelson)
Newsgroups: comp.std.c++
Subject: Re: Zero-length structures and pointer comparisons
Message-ID: <1gtblgINN72@darkstar.UCSC.EDU>
Date: 18 Dec 92 20:17:52 GMT
References: <1992Dec15.162202.11231@ucc.su.OZ.AU> <1992Dec16.201044.2968@microsoft.com> <1992Dec18.193554.18588@ucc.su.OZ.AU>
Organization: University of California, Santa Cruz (CE/CIS Boards)
Lines: 46
NNTP-Posting-Host: oak.ucsc.edu

In article <1992Dec18.193554.18588@ucc.su.OZ.AU> maxtal@extro.ucc.su.OZ.AU (John MAX Skaller) writes:
>In article <1992Dec16.201044.2968@microsoft.com> jimad@microsoft.com (Jim Adcock) writes:

>	I know what you are saying but dont see it.
>ARM p74:"two pointers to the same object compare equal".
>Any program for which this is not true cannot be conforming,
>neither strictly nor non-strictly, it is non-conforming, it is
>not in fact a C++ program.

I think this is a requirement on implementations, rather than
a requirement on programs. 

>	Or have I got this wrong?

You might have it backwards.

>	For this reason I think the ARM requirement is unworkable,
>and must be modified. The rule should state that pointers
>derived from the same object directly in the program must
>compare equal. Pointers obtained from the OS need not follow
>this rule, in that case it is implementation defined.

Neither the C standard nor the C++ standard discusses any OS.
(As far as I recall.)

A call to the operating system should be viewed as
a call to an extension supplied by the language provider. 
A program that uses an extension can be conforming but
not strictly conforming, as per the X3J16 definitions. 

Thus, I think a better rule is:
	``In a strictly conforming program, two pointers
	to the same object compare equal.''
Thus, this property need not be true in any program that
calls the operating system.

I think actually that ramifications of multiple inheritance 
and multiple object-addresses should be explicitly addressed
in the rule, such as by saying that a pointer to a base-class
subobject is not a pointer to the same object as a pointer
to the most-derived class object.

>        JOHN (MAX) SKALLER,         maxtal@extro.ucc.su.oz.au

Daniel Edelson
daniel@cse.ucsc.edu


