コンパイルエラーがとれなくて困ってます

■ ヘッダー側
template<class T>
class Test
{
public:
  Test(void (*func)(T)) {}
  Test(void (*func)(const T&)) {}
};
typedef Test<int *> TestPtr; // テンプレート引数がポインタ型

■ 呼び出し側
static void func1(int *x) {}
static void func2(const int *x) {}

void main()
{
  TestPtr test1(func1); // OK
  TestPtr test2(func2); // コンパイルエラー
}

VC2008だと以下のエラーになります。
1 番目の引数を 'void (__cdecl *)(const int *)' から 'void (__cdecl *)(T)' に変換できません。

func2みたいにconst付けるとなんでダメなんでしょうか?