WTLで使われている手法ですね。friendは余計ですが...。
#include <iostream> // 継承関係にあるクラス間でお互いのメンバ参照が行えるサンプル template <class T> struct A { friend T; A(){_u = 6;}; void f(){std::cout << typeid(A<T>).name() << ":" << static_cast<T*>(this)->_value << std::endl;}; // 派生クラスのメソッドを呼び出す void callg(){static_cast<T*>(this)->g();}; private: int _u; }; struct B : A<B> { friend struct A<B>; B(){_value = 10;}; void g(){std::cout << typeid(B).name() << ":" << _u << std::endl;}; // ベースクラスのメソッドを呼び出す(当たり前) void callf(){f();}; private: int _value; }; main() { B b_; b_.callf(); b_.callg(); }