C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

type-specifier

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language, library and standards
View previous topic :: View next topic  
Author Message
Alan M. Feldstein
Guest





PostPosted: Thu Oct 19, 2006 2:23 am    Post subject: type-specifier Reply with quote



I'm having trouble understanding how the following code maps to the
syntax specified in ISO/IEC 14882:2003.

typedef union {
..
struct str_pair_t drive;
..
} yystype;

(The ellipses respresent suppression of detail superfluous to this
discussion.)


This is in the form

typedef type-specifier yystype;

and I'm having no problem with that part.


Therefore,

union {
..
struct str_pair_t drive;
..
}

is a type-specifier, specifically a class-specifier.


From Clause 9,

class-specifier:

class-head { member-specification_opt }



Therefore,

..
struct str_pair_t drive;
..

is a member-specification.


We match Clause 9.2 as follows

member-specification:

member-declaration member-specification_opt


and can conclude that

struct str_pair_t drive;

is a member-declaration.


It is obvious to me that this is not a function-definition,
using-declaration, or template-declaration. The following possible
matches remain:

member-declaration:

decl-specifier-seq_opt member-declarator-list_opt ;
::_opt nested-name-specifier template_opt unqualified-id ;



A nested-name-specifier must have "::" in it (Clause 5), so we conclude that

struct str_pair_t drive;

must match

decl-specifier-seq_opt member-declarator-list_opt ;


There is no comma in the statement, so the optional
member-declarator-list might be (9.2)

member-declarator-list:

member-declarator



Here, the only possible matches are

member-declarator:

declarator pure-specifier_opt
declarator constant-initializer_opt


which are both the same in this case: declarator.


From Clause 8, the only possible match is

declarator:

direct-declarator


and

direct-declarator:

declarator-id


and

declarator-id:

id-expression
::_opt nested-name-specifier_opt type-name



From Clause 5.1,

id-expression:

unqualified-id
qualified-id


and we have a match on

unqualified-id:

identifier



Therefore,

struct str_pair_t drive;

matches

decl-specifier-seq_ identifier ;

where drive is the identifier.


From Clause 7.1,

decl-specifier-seq:

decl-specifier-seq_opt decl-specifier


and

decl-specifier:

storage-class-specifier
*type-specifier*
function-specifier
friend
typedef



I expect

struct str_pair

to be a type-specifier, but I don't see how it matches that.

--

Alan Feldstein

Cosmic Horizon logo

http://www.alanfeldstein.com/

---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]
Back to top
Greg Herlihy
Guest





PostPosted: Thu Oct 19, 2006 2:48 am    Post subject: Re: type-specifier Reply with quote



"Alan M. Feldstein" wrote:
Quote:
I'm having trouble understanding how the following code maps to the
syntax specified in ISO/IEC 14882:2003.

typedef union {
.
struct str_pair_t drive;
.
} yystype;

(The ellipses respresent suppression of detail superfluous to this
discussion.)


This is in the form

typedef type-specifier yystype;

and I'm having no problem with that part.
....
I expect

struct str_pair

to be a type-specifier, but I don't see how it matches that.

The presence of the "struct" keyword (usually present for C
compatibility) means that the type-specifier has to be reduced to an
elaborated-type-specifier. An elaborated-type-specifier has the
following syntax:

class-key ::_opt nested-name-specifier_opt identifier

Since the middle two terms are optional, "struct str_pair" matches:

class-key identifier

Greg

---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]
Back to top
Alberto Ganesh Barbati
Guest





PostPosted: Thu Oct 19, 2006 5:45 am    Post subject: Re: type-specifier Reply with quote



Alan M. Feldstein ha scritto:
Quote:

I expect

struct str_pair

to be a type-specifier, but I don't see how it matches that.


§7.1.5.3/1

elaborated-type-specifier:
class-key ::opt nested-name-specifier opt identifier
class-key ::opt nested-name-specifier opt template opt template-id
enum ::opt nested-name-specifier opt identifier
typename ::opt nested-name-specifier identifier
typename ::opt nested-name-specifier template opt template-id


So "struct str_pair" is an elaborated-type-specifier, matching the first
production rule with class-key == "struct" (see §9/1) and identifier ==
"str_pair" (see 2.10/1).

§7.1.5/1

type-specifier:
simple-type-specifier
class-specifier
enum-specifier
elaborated-type-specifier
cv-qualifier

So "struct str_pair" is a type-specifier, matching the fourth production
rule.

HTH,

Ganesh

---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language, library and standards All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.