This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/21386] New: Inconsistent diagnostics for taking address of rvalue
- From: "benh at bwsint dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 4 May 2005 18:30:52 -0000
- Subject: [Bug c++/21386] New: Inconsistent diagnostics for taking address of rvalue
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
g++ reports an error where a program attempts to take the address of an rvalue
of built-in type, but merely warns where it takes the address of an rvalue of
user-defined type:
$ cat test.cc
int i() { return 0; }
class A {};
A a() { return A(); }
int main()
{
int * pi = &i();
A * pa = &a();
}
$ g++-3.4 test.cc
test.cc: In function `int main()':
test.cc:6: error: non-lvalue in unary `&'
test.cc:7: warning: taking address of temporary
The first error message is also odd; "non-lvalue" is C terminology that is
rarely used in relation to C++.
I would expect an attempt to take the address of an rvalue of any type to result
in an error; it's banned by the standard and I can't think of any useful
semantics for it if it is allowed.
--
Summary: Inconsistent diagnostics for taking address of rvalue
Product: gcc
Version: 3.4.4
Status: UNCONFIRMED
Severity: minor
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: benh at bwsint dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i486-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21386