Если класс объявляется внутри некоторой функции, то он называется локальным. Функция, в которой объявлен локальный класс, не имеет непосредственного доступа к компонентам локального класса. Доступ осуществляется с помощью указателя имени объектов встроенного класса.

Локальный класс не может иметь статических полей. Объекты локального класса могут быть созданы только внутри функции в области действия объявления класса, причем все компонентные функции локального класса должны быть встраиваемыми
Пример 1
int x;
void f()
{
 static int s;
 int x;
 extern int g();

 struct local {
        int g() { return x; }   // ошибка, auto x
        int h() { return s; }   // OK
        int k() { return ::x; } // OK
        int l() { return g(); } // OK
 };
 //  ...
}

local* p = 0;  // ошибка: нет local в текущем контексте