[PATCH] Implement DR85: Redeclaration of member class

Richard Smith richard at metafoo.co.uk
Mon Jun 10 12:56:26 PDT 2013


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
};

>> 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
>



More information about the cfe-commits mailing list