Ответ 1
Если в области существует функция или переменная с именем, идентичным имени типа класса, класс может быть добавлен к имени для значения, в результате чего специфицированный спецификатор типа.
Вы всегда можете использовать специфицированный спецификатор типа. Однако его основной вариант использования - это когда у вас есть функция или переменная с одинаковым именем.
Пример из cppreference.com:
class T {
public:
class U;
private:
int U;
};
int main()
{
int T;
T t; // error: the local variable T is found
class T t; // OK: finds ::T, the local variable T is ignored
T::U* u; // error: lookup of T::U finds the private data member
class T::U* u; // OK: the data member is ignored
}