Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>Вот есть 7.3.3/15, который говорит
L_L>должен компилиться (ну, при условии, что включены соответствующие заголовки). Например, g++ и Comeau его вполне компилируют.
а вот есть 10.3.2 (текст приводить не буду, только код), который говорит что зря они это делают
struct a{
virtual void f();
};
struct b : virtual public a{
virtual void f();
};
struct c : b, virtual a{
using a::f;
};
int main()
{
using namespace std;
с d;
d.f(); //b по стандарту
vector<с> v;
for_each(v.begin(), v.end(), mem_fun_ref(&с::f));//угадайте какая?
}
ладно. спорить можем до бесконечности всё равно ни к чему не приведёт. как выясняется у разработчиков компилеров тоже нет единого мнения.
D>а вот есть 10.3.2 (текст приводить не буду, только код), который говорит что зря они это делают
уффф, этот-то пункт как относится к исходному примеру?
D>D>struct a{
D> virtual void f();
D>};
D>struct b : virtual public a{
D> virtual void f();
D>};
D>struct c : b, virtual a{
D> using a::f;
D>};
D>int main()
D>{
D> using namespace std;
D> с d;
D> d.f(); //b по стандарту
D> vector<с> v;
D> for_each(v.begin(), v.end(), mem_fun_ref(&с::f));//угадайте какая?
D>}
D>
а::f. а ты как думаешь?
D>ладно. спорить можем до бесконечности всё равно ни к чему не приведёт. как выясняется у разработчиков компилеров тоже нет единого мнения.
Даже у VS нет единого мнения, как он должен себя вести. Например, если в исходном примере заменить все статическими функциями-членами, то &Derived::test ему не нравится, тогда как Derived::test() уже нормально.
Да, к тому же мы по-разному читаем стандарт.