以下はすべて、まったく問題のないC++のコードである。
int typedef type ; int f() { return 0 ; } int extern f() ; struct C { int friend f() ; void virtual g() {} } typedef * pointer ;
なぜなら、指定子には順番という概念がないからである。
ただし、指定子と宣言子の違いに注意しなければならない。
int typedef type ;
は問題ないが、
int * typedef type ;
これはエラーである。なぜならば、「*」は、指定子(specifier)ではなく、宣言子(declarator)だからである。
指定子と宣言子の区別は、通常のユーザーは知らなくてもいいことなので、普通の参考書は、typedef指定子を先頭に書いているのだろう。
これは、今、C++本の指定子について書いていて、thread_localとstaticの順番が関係ないので、そのことを解説しておこうと思って、気がついた。
void f() { thread_local static int x ; static thread_local int y ; }
そもそも、一般に、順番に意味のある指定子というものが見つからなかったので、わざわざthread_localとstaticについてだけ書くまでもないだろう。
No comments:
Post a Comment