uzhas:
SM>>Я не хочу вдаваться в такие вещи как "two-phase name lookup" или ADL, потому что все таки это особенности реализации компиляторов, и в стандарте о них нет ни слова.
U>ADL вполне себе стандартизованная вещь
Как и two-phase name lookup.
SM>>Я хочу понять, какое поведение как правильное определяется стандартом ?
U>не могу сказать точно, но интуитивном уровне подоpреваю баг у гцц.
GCC поступает правильно (см. 14.6.2/3)
SM>>И как с этим вообще жить ? Почему так ?
U>более явно можно прописывать, что за функцию мы вызываем
U>U>this->foo(); // вызываем свою
Ещё можно использовать using
struct B
{
void f() {}
};
template <class T>
struct D : T
{
using T::f;
void g()
{
f();
}
};
int main()
{
D<B>().g();
}