Согласно ($ 3.4.4) имя typedef, за которым следует ключ класса, недопустимо. Но я не уверен, в какой сфере? Например: далее компилятор не будет жаловаться, если в блоке, например внутри функции, используется разработанный спецификатор.
typedef class { /* ... */ } S;
// invalid
class S;
// ok
void foo() {
class S;
}
Допустимо ли объявлять класс в локальной области видимости с помощью typedef-name, почему?