3つの引数をもつ C++ typedef の意味
Boost.Proto Users' Guide を読んでいるのですが、そのなかの
typedef typename Context::template eval<Expr>::result_type type;
という構文の意味が理解できずにいます。
http://www.boost.org/doc/libs/1_57_0/doc/html/proto/users_guide.html#boost_proto.users_guide.back_end.expression_evaluation.proto_eval
C++ の typedef の引数は2つであると思っていたのですが、3つの場合がありうるのでしょうか?
そうであるなら、どのような意味を持つのでしょうか?
あるいは、typedefの引数は2つの場合しかないならば、上記構文の typename Context::template はどのような意味を持つと解釈すれば良いのでしょうか?
恥ずかしながら、typedef の使い方にをひととりおさらいしたつもりなのですが、上記構文の意味はわかりません。ヒントやtypedefについての解説へのURLだけでも助かりますので、どうか宜しくお願いいたします。