Класс может быть объявлен в определении функции; такой класс называется local классом. Имя локального класса является локальным для окружающей его области видимости. Локальный класс находится в области охватывающей области и имеет такой же доступ к именам вне функции, как и включающая функция. Объявления в локальном классе не должны быть odr-use переменной с автоматической продолжительностью хранения из охватывающей области. [ Example:
int x; void f() { static int s; int x; const int N = 5; extern int q(); struct local { int g() { return x; } // error: odr-use of automatic variable x int h() { return s; } // OK int k() { return ::x; } // OK int l() { return q(); } // OK int m() { return N; } // OK: not an odr-use int* n() { return &N; } // error: odr-use of automatic variable N }; } local* p = 0; // error: local not in scope
— end example ]
Вмещающая функция не имеет специального доступа к членам локального класса; он подчиняется обычному access rules. Функции-члены локального класса должны быть определены в их определении класса, если они вообще определены.