Chained Inheritance(鎖状継承とでも訳すべきですかね?)

以下のようなクラス群を考えます.

class nil_t{};

template
class A : public Super
{ };

template
class B : public Super
{ };

template
class C : public Super
{ };

Aのテンプレート引数T1とT2,Bのテンプレート引数T,Cのテンプレート引数T1とT2は各々のクラスに必要なテンプレート引数だと思ってください.上のA,B,Cに共通する事としてテンプレート引数で自身の親クラスを指定できるということが挙げられます.また,そのデフォルトはnil_tという空のクラスに指定されています.
さて,クラスDをクラスCから継承してみます.

class D : public C
{ };

何の問題も無いですね?一つだけ,Cが暗黙のうちにnil_tから継承されているということには注意が必要です.
さて,では以下のように書くとどうなるでしょうか?

class D
 : public C >
{ };

まず,Bは暗黙のうちにnil_tを継承しています.次にC >はBを継承しています.最後にDはそのC >を継承しています.要するに上のように書くことでnil_t → B → C → Dという継承の鎖を生成することが出来ます.
となれば,後は以下のように自由に継承の鎖を生成できるということは簡単に想像できるかと思います.

class D
 : public B > >
{ };

上の例ではnil_t → C → A → B → Dという継承の連鎖を生成しています.
このChained Inheritanceを利用する目的とその実例として,自分が知っている範囲内では

  • (インターフェースやポリシーを規定するような)空クラスを多数継承する際に,EBCOが効かない環境での空間のオーバーヘッドの削減を図る -> boost::operators
  • 継承によってクラスの構造(データメンバ)の構築を行う -> boost::property

あたりが挙げられるでしょうか?珍しいテクニックではあると思います.