[PATCH] Implement DR85: Redeclaration of member class

David Majnemer david.majnemer at gmail.com
Mon Jun 10 15:21:50 PDT 2013


On Mon, Jun 10, 2013 at 12:56 PM, Richard Smith <richard at metafoo.co.uk>wrote:

> On Mon, Jun 10, 2013 at 11:41 AM, David Majnemer
> <david.majnemer at gmail.com> wrote:
> > On Mon, Jun 10, 2013 at 9:14 AM, Jordan Rose <jordan_rose at apple.com>
> wrote:
> >>
> >> The text says "already-defined", but in the first case it's merely
> >> declared twice.
> >
> >
> > Fixed.
> >
> >>
> >>
> >> If there's really no better justification than "because the standard
> says
> >> so", why not make this Ext or ExtWarn instead of Error? Clearly we
> already
> >> have this working.
> >
> >
> > I made it ExtWarn and gave it the flag -Wmember-class-redeclared.
>
> In C++11, the relevant text is: "A member shall not be declared
> twice in the member-specification, except that a nested class or
> member class template can be declared and
> then later defined, and except that an enumeration can be introduced
> with an opaque-enum-declaration and
> later redeclared with an enum-specifier."


> Please add tests for the union and enum cases too, and make sure the
> patch correctly handles them.
>
> struct A {
>   union U;
>   union U {}; // ok
>   union U; // error
>
>   enum E1 : int;
>   enum E1 : int { e1 }; // ok
>   enum E1 : int; // error
>
>   enum class E2;
>   enum class E2 { e2 }; // ok
>   enum class E2; // error
> };
>

Done.


>
> >> Jordan
> >>
> >>
> >> On Jun 9, 2013, at 23:51 , David Majnemer <david.majnemer at gmail.com>
> >> wrote:
> >>
> >> The attached patch implements DR85 [*] which disallows the existence of
> a
> >> declaration of a member class that isn't a forward declaration before
> it's
> >> definition.
> >>
> >> This means that the following would be disallowed:
> >> class A {
> >>   struct B; // note here
> >>   struct B; // error here
> >> };
> >>
> >> as well as:
> >> class C {
> >>   struct B {}; // note here
> >>   struct B; // error here
> >> };
> >>
> >> I'm very open to suggestions on the diagnostic, I couldn't think of a
> >> great one that doesn't boil down to "this is forbidden because the
> standard
> >> says so."
> >>
> >> [*] http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#85
> >>
> >> Thanks
> >> --
> >> David Majnemer
> >>
> >>
> >> _______________________________________________
> >> cfe-commits mailing list
> >> cfe-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> >>
> >>
> >>
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130610/9d1cb2e9/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dr85.diff
Type: application/octet-stream
Size: 4404 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130610/9d1cb2e9/attachment.obj>


More information about the cfe-commits mailing list