Собственно ответ нашел (https://stackoverflow.com/a/6319619).
struct Base
{
    virtual int Foo()
    {
        return -1;
    }
};
struct Derived : public Base
{
    virtual int Foo()
    {
        return -2;
    }
};
int main(int argc, char* argv[])
{
    Base *x = new Derived;
    ASSERT(-2 == x->Foo());
    //syntax is trippy but it works
    ASSERT(-1 == x->Base::Foo());
    return 0;
}
Но интересно, такая форма описана в каком-нибудь стандарте?




