#include <iostream>

void bar()
{
  std::cout << "::bar()" << std::endl;
}

template <typename T>
class Base
{
public:
    void bar() { std::cout << "Base::bar()" << std::endl; }
};

template <typename T>
class Derived : public Base<T>
{
public:
    void foo() { this->bar(); }       // calls Base::bar()
};

int main()
{
    Derived<int> d;
    d.foo();
    return 0;
}