Вот тестовый вопрос:
Рассмотрим следующий код:
class A {
typedef int I; // private member
I f();
friend I g(I);
static I x;
};
Какое из следующего допустимо:
a. A::I A::f() { return 0; }
b. A::I g(A::I p = A::x);
c. A::I g(A::I p) { return 0; }
d. A::I A::x = 0;
Ответ на этот вопрос считается правильным только для первой версии (а.), но почему? Все они действительны, на мой взгляд. Даже проверены все они компилируются успешно. Почему правильный ответ правильный?