class A :public hoge<A>
{
voif foo();
};

みたいな記述を見かけるのですが、

1 コンパイラはどういう順番でコレを解釈するんでしょうか?
(Aの親クラスがhoge<A>で、Aの定義は・・ と無限ループしないか?)
2 どういう用途に使われるんでしょうか
3 この技法は一般的に何と呼ばれるんしょうか

解説したサイト等を探してるのですが、検索ワードが思いつきません・・・