>>243
ごめん、上でArgs::inheritedとか書いたけど無視してくれ
Argsがタプルならこの方法でconsリストを取り出せるけど、Argsとして渡されるのは最初からconsリストだった。

で、そのファンクタの場合も、boost::tuples::elementとis_sameとif_cでちまちまテストしてもいいし、
部分特殊化で一気にディスパッチしてもいい。
後者なら、メンバテンプレートは特殊化できないので、こんな感じで。

namespace detail {
  namespace bt = boost::tuples;
  template <typename Args> struct A_sig;

  template <typename Fun>
  struct A_sig<bt::cons<Fun, bt::cons<int, bt::null_type> > > { typedef int type; };
  template <typename Fun>
  struct A_sig<bt::cons<Fun, bt::cons<double, bt::null_type> > > { typedef double type; };
  template <typename Fun>
  struct A_sig<bt::cons<Fun, bt::cons<int, bt::cons<int, bt::null_type> > > > { typedef void type; };
}

struct A {
  template <typename Args>
  struct sig { typedef typename detail::A_sig<Args>::type type; };
/* 以下略 */