This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Address of a cast expression in C++
- From: Matt Austern <austern at apple dot com>
- To: gcc at gcc dot gnu dot org
- Date: Thu, 25 Jul 2002 11:22:24 -0700
- Subject: Address of a cast expression in C++
With both 3.1 and TOT, the following program is rejected by
the C front end but accepted by the C++ front end. g++
compiles it without error or warning.
#include <stdio.h>
int main() {
int n = 0;
char* p = &(char)n;
*p = 0x7f;
printf("%x\n", n);
}
As I read the C++ Standard, this is incorrect; a diagnostic is
required. 5.4/1 says that the result of (char)n is an rvalue,
and 5.3.1/2 says that you can't take the address of an rvalue.
Question: is this violation of the C++ Standard deliberate,
or is it a bug?
The reason I ask, of course, is that gcc has a generalized
lvalue extension. The manual says that even with this
extension it's illegal to write &(int)f. Who's wrong: the manual,
or the compiler?
--Matt