>>9
> template <class R, class A>
> class widget<R(A)>
これは引数をひとつ取る関数に対する特殊化。
引数を取らない関数について適用されないのは当然と言えば当然。


引数を取らないことを表す引数リスト (void) は括弧も含めた特殊な
構文であって、型が void の引数をひとつ指定すれば有効というわけじゃない。
つまりこんなの↓も実は不正。

typedef void A;
int f(A);