整数を素因数分解する関数 factorize() を作ろうとしていて
テンプレートの使い方で詰まっています。

factorize() を以下のように作りました。

int[] factorize(int n) {
    assert(n > 0);
    if (n == 1) return [1];
    int[] ps;
    while (n % 2 == 0) {
        ps ~= 2;
        n /= 2;
    }
    for (int i = 3; i * i <= n; i += 2) {
        while (n % i == 0) {
            ps ~= i;
            n /= i;
        }
    }
    if (n > 1) ps ~= n;
    return ps;
}

ここで引数 n を int に制限するのではなく long でも使いたいと考えています。
しかし、int に収まる場合は int で計算して欲しいです。
そのためにテンプレートを使いました。

T[] factorize(T)(T n) {
    // 略
}

実行するとうまく動作しているように見えます。

writeln(factorize(30)); // [2, 3, 5]
writeln(factorize(2L^^35).length); // 35

しかし、const 値を渡すとコンパイルエラーになります。

const n = 12;
writeln(factorize(n)); // コンパイルエラー(cannot modify const expression n)

定数なので値を変更できないのが理由なので
いったん変数で受けたいのですが書き方がわからないです。

この場合、テンプレート引数をどのように書けばよいでしょうか?