C++11 では、型指定子にはクラス指定子と列挙指定子が含まれます。(別名クラス定義と列挙定義)
文法/構文によると、型指定子は言語のいくつかの場所に現れる可能性がありますが、それらすべての場所でクラス指定子と列挙指定子が許可されているわけではありません。
例えば:
struct C{} c;
// ok: types may be defined in the specifiers of a simple declaration
void f(struct S{});
// error: types may not be defined in parameter types
constexpr auto i = sizeof(enum E{});
// error: types may not be defined in ‘sizeof’ expressions
標準のどこで、これらの型指定子の使用を、型が定義されている場合と定義されていない場合に分けていますか? たとえば、sizeof 式で型を定義してはならないというルールはどこにありますか?