Что такое ключевое слово класса перед аргументом функции?

Почему этот код работает? См. Ключевое слово class в начале аргумента функции f? Что это изменится, если я его добавлю?

struct A
{
    int i;
};

void f(class A pA) // why 'class' here?
{
    cout << pA.i << endl;
}

int main() 
{
    A obj{7};
    f(obj);
    return 0;
}

Ответ 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
}