#include <cassert>

template <typename Derived>
struct base
{
  char interface() { return reinterpret_cast<Derived*>(this)->implementation(); }
  static char static_func() { return Derived::static_sub_func(); }
};

struct derived : base<derived>
{
  char implementation() { return 'A'; }
  static char static_func() { return 'B'; }
};

template <typename T>
char f(base<T>& t) { return t.interface(); }

int main() {
  derived d;
  assert( f(d) == 'A' );
}
英語版wikipediaを参考に書いてみましたがまだしっくりきません
というかあきらかに違うような気がします