This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
gcc 2.95.2 (g++), member pointer to non-static member array element
- To: <gcc at gcc dot gnu dot org>
- Subject: gcc 2.95.2 (g++), member pointer to non-static member array element
- From: "Tuukka Tikkanen" <tic0 at vip dot fi>
- Date: Fri, 28 Jul 2000 18:36:54 +0300
(Seems like the bug submission address in documentation is out of date, so
I'll just blatantly toss this report on to gcc@gcc.gnu.org and hope
maintainers catch it there.)
Hello,
it seems 2.95.2 (and older egcs 1.1.2) release has an interesting bug and
does not allow taking member pointer (offset) of member array element, since
it assumes "&Class::member[]" means taking address (normal) instead of
checking whatever the value is used as member pointer.
Getting this to work would be very useful (and standard conforming :), since
I use it to map textual input names (user input) to class members and in
some cases member array elements.
Tuukka
--- demonstration source ---
class Foo {
public:
char c1;
char c2;
char a[10];
};
int main(int argc, char *argv[])
{
char Foo::* cp;
Foo someFoo;
// Non-array members are OK
cp = &Foo::c1;
someFoo.*cp = 42;
// (another)
cp = &Foo::c2;
someFoo.*cp = 13;
// Following still OK... no subscription
cp = Foo::a;
someFoo.*cp = 69;
// Now the compiler does a bad thing(tm) and misinterprets
// the expression to mean taking address (illegal) instead
// of taking offset.
cp = &Foo::a[5];
someFoo.*cp = 0;
}
--- cut here ---
g++ bug.C -o bug
bug.C: In function `int main(int, char **)':
bug.C:5: member `Foo::a' is non-static but referenced as a static member
bug.C:21: at this point in file
gcc version 2.95.2 19991024 (release)