#include <iostream>

using namespace std;

template <class Derived>
struct base
{
    void interface()
    {
         // ...
         static_cast<Derived*>(this)->implementation();
         // ...
    }
};

 
struct derived : base<derived>
{
    char var;
    derived()
    {
        var = 'H';
    }
     void implementation()
     {
        cout << var << "\n";
     }
};


int main()
{
    derived * A = new derived();
    A->interface();
    delete A;

    return 0;
}
