This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/11072] New: [3.4 regression] Implementation of offsetof macro
- From: "bangerth at dealii dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 3 Jun 2003 01:34:40 -0000
- Subject: [Bug c++/11072] New: [3.4 regression] Implementation of offsetof macro
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11072
Summary: [3.4 regression] Implementation of offsetof macro
Product: gcc
Version: 3.4
Status: UNCONFIRMED
Severity: critical
Priority: P1
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: bangerth@dealii.org
CC: gcc-bugs@gcc.gnu.org
OtherBugsDependingO 10922
nThis:
[Yet another problem with 10922. It is similar to 9881, which is why I CC:
you, Nathan.]
This fails on mainline:
-----------------------------
#include <cstddef>
template <typename> struct S {
int i, j;
static const unsigned int value = offsetof(S,j);
};
-----------------------------
g/x> /home/bangerth/bin/gcc-3.3-pre/bin/c++ -c y.cc
g/x> /home/bangerth/bin/gcc-3.4-pre/bin/c++ -c y.cc
y.cc:5: error: a cast to a type other than an integral or enumeration type
cannot appear in a constant-expression
Now, in contrast to the claim in PR 10922, I can't find a place in the standard
that would mandate that the result of offsetof is an integer constant
expression. 18.1.5 only says that it can only be applied to POD types, which
certainly is the case here. However, it might be a QoI issue to really
let the result be an integral constant.
W.
PS: The expansion of offsetof yields here:
(reinterpret_cast <size_t> (&reinterpret_cast <char &>(static_cast <S *> (0)->j)));
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.