VC и GCC: разное поведение, а как д.б. по стандарту?
От: stil.man  
Дата: 27.03.12 11:25
Оценка: :)
Я так понимаю особенность известная, но я хотел бы кое что для себя прояснить.

Есть элементарный код, который при компиляции в VC и в GCC дает разный результат:


#include <iostream>
#include <stdio.h>

void foo()
{
    std::cout << "\r\nGlobal\r\n";
}


template <typename T> class Base {
public:
    void foo()
    {
        std::cout << "\r\nBase\r\n";    }
};

template <typename T> class Derived : public Base<T> {
public:
    int call_foo ()  {
        foo();
        return 1;
    }
};


int main(int argc, char* argv[])
{
    //foo = 666;

    Derived<int> h;
    h.call_foo();

    //std::cout << h.get_foo() << std::endl;
    return 0;
}



VC(2008 и старшие): 
Base
GCC(4.6.1):
Global


Я не хочу вдаваться в такие вещи как "two-phase name lookup" или ADL, потому что все таки это особенности реализации компиляторов, и в стандарте о них нет ни слова.
Я хочу понять, какое поведение как правильное определяется стандартом ?
И как с этим вообще жить ? Почему так ?:)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.