Где в объявлении может быть указан спецификатор класса хранения?

Например, пустьсstatic спецификатор класса хранения. Вот несколько примеров правильного и неправильного использования этого спецификатора класса хранения:

static int a;        // valid
int static b;        // valid

static int* c;       // valid
int static* d;       // valid
int* static e;       // ill-formed

static int const* f; // valid
int static const* g; // valid
int const static* h; // valid
int const* static i; // ill-formed

typedef int* pointer;
static pointer j;    // valid
pointer static k;    // valid

(Декларации помечены "действительный» были приняты Visual C ++ 2012, g ++ 4.7.2 и Clang ++ 3.1. Декларации с пометкойплохо сформирован» были отклонены всеми этими компиляторами.)

Это кажется странным, потому что спецификатор класса хранения применяется к объявленной переменной. Это объявленная переменная, котораяstatic, а не тип объявленной переменной. Почемуe а такжеi плохо сформирован, ноk хорошо сформирован?

Какие правила определяют правильное размещение спецификаторов классов хранения? В то время как я'мы использовалиstatic в этом примере вопрос относится ко всем спецификаторам классов хранения. Желательно, чтобы в полном ответе содержались ссылки на соответствующие разделы стандарта языка C ++ 11 и их пояснения.

Ответы на вопрос(3)

Ваш ответ на вопрос