diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 78899b633a2..af98592afef 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-03-02 Nathan Sidwell + + * class.c (check_field_decls): Pointers to member do not a + non-pod struct make, as per DR 148. + 2001-03-02 Nathan Sidwell * call.c (joust): cp_pedwarn when using gnu extension concerning diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 8af19c5d31c..2fb75b2caaf 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -3594,10 +3594,9 @@ check_field_decls (t, access_decls, empty_p, if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type)) CLASSTYPE_HAS_MUTABLE (t) = 1; - if (! pod_type_p (type) - /* For some reason, pointers to members are POD types themselves, - but are not allowed in POD structs. Silly. */ - || TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type)) + if (! pod_type_p (type)) + /* DR 148 now allows pointers to members (which are POD themselves), + to be allowed in POD structs. */ CLASSTYPE_NON_POD_P (t) = 1; /* If any field is const, the structure type is pseudo-const. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6c43b68b00e..e0b9178076d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-03-02 Nathan Sidwell + + * g++.old-deja/g++.other/pod1.C: New test. + 2001-03-02 Nathan Sidwell * g++.old-deja/g++.ext/overload1.C: New test. diff --git a/gcc/testsuite/g++.old-deja/g++.other/pod1.C b/gcc/testsuite/g++.old-deja/g++.other/pod1.C new file mode 100644 index 00000000000..c6faf0d0b18 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/pod1.C @@ -0,0 +1,21 @@ +// Build don't link: + +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 28 Feb 2001 + +// DR 148. Now allows pointer to members in POD struct. + +struct X +{ + int X::*m; + int (X::*f) (); +}; + +void Foo (int, ...); + +void Baz () +{ + X x; + + Foo (1, x); +}