Следующий код не компилируется в gcc:
namespace One{
class A{
};
};
namespace Two{
class A{
public:
void what(){
cout << "Two::A says what!" << endl;
}
};
class B : public One::A{
public:
B(){
A xx;
xx.what();
}
};
};
И он дает:
gccbug.cpp: In constructor ‘Two::B::B()’:
gccbug.cpp:23: error: ‘class One::A’ has no member named ‘what’
Теперь мне сказали, что это правильное поведение (из-за введенного базового имени One :: A, создающего A обратитесь к One :: A). Однако этот код компилируется на C # (ну, после некоторых изменений), так что, похоже, он специфичен для C ++.
Мне интересно ... почему? Есть ли какая-то конкретная цель для вставки базового имени «One :: A» как «A»?