Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.std.c++ > #482

Re: Typo in the Working Draft of the C++ Standard # 3337

From Daniel Krügler<daniel.kruegler@googlemail.com>
Newsgroups comp.std.c++
Subject Re: Typo in the Working Draft of the C++ Standard # 3337
Date 2012-04-19 11:08 -0700
Organization A noiseless patient Spider
Message-ID <jmmvqd$eck$1@dont-email.me> (permalink)
References <6f6d535e-66de-42d1-adb6-639be3a67565@m18g2000vbl.googlegroups.com> <2012041811243463815-pete@versatilecodingcom>

Show all headers | View raw


Am 18.04.2012 17:54, schrieb Pete Becker:
>  On 2012-04-18 06:11:23 +0000, Vlad from Moscow said:
>
>>  I found a typo in the Working Draft of the C++ Standard #3337 in
>>  paragraph #2 of the section 11.3 Friends. There is the following
>>  example
>>
>>  [ Example:
>>  class A {
>>  class B { };
>>  friend class X;
>>  };
>>  struct X : A::B { // OK: A::B accessible to friend
>>  A::B mx; // OK: A::B accessible to member of friend
>>  class Y {
>>  A::B my; // OK: A::B accessible to nested member of friend
>>  };
>>  };
>>  —end example ]
>>
>>  It is obvious that instaed of struct X : A::B shall be class X : A::B
>>  because the friend declaration of X uses specifier class.
>>  Maybe this typo is present in the C++ Standard. It should be checked.
>
>  It's the same in the standard. Probably should be changed, for clarity.

Actually I think it should stay, because it simply confirms that struct
and class are equivalent for declarations. This is not the first time
that someone believed that both class-keys would be different in
non-defining declarations. Actually, there also exists at least one
compiler, which can produce defective code, when declaring

class X;

in one place and

struct X;

in another. This is clearly a compiler defect, but this problem often
has the effect that kind of misunderstandings stay alive.

>  But my recollection is (I haven't looked it up) that struct, class, and
>  even union can be used interchangeably in a forward declaration; it's
>  only at the point of definition that the keyword matters.

struct and class are equivalent class-keys, but both differ from union,
see 7.1.6.3 p3:

"Thus, in any elaborated-type-specifier, the enum keyword shall be used
to refer to an enumeration (7.2), the union class-key shall be used to
refer to a union (Clause 9), and either the class or struct class-key
shall be used to refer to a class (Clause 9) declared using the class or
struct class-key."

Greetings from Bremen,

Daniel




-- 
[ comp.std.c++ is moderated.  To submit articles, try posting with your ]
[ newsreader.  If that fails, use mailto:std-cpp-submit@vandevoorde.com ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html                      ]

Back to comp.std.c++ | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Typo in the Working Draft of the C++ Standard # 3337 Vlad from Moscow <vlad.moscow@mail.ru> - 2012-04-17 23:11 -0700
  Re: Typo in the Working Draft of the C++ Standard # 3337 Pete Becker<pete@versatilecoding.com> - 2012-04-18 08:54 -0700
    Re: Typo in the Working Draft of the C++ Standard # 3337 Daniel Krügler<daniel.kruegler@googlemail.com> - 2012-04-19 11:08 -0700
    Re: Typo in the Working Draft of the C++ Standard # 3337 Vlad from Moscow<vlad.moscow@mail.ru> - 2012-04-19 11:08 -0700

csiph-web