toDynamic

テンプレート引数の型推論には若干柔軟さに欠けるところがあります。
例えば文字列リテラルを渡すと「char型の要素Nの静的配列」と推論してくれるわけですが、本当は動的配列だと推論して欲しい、ということがよくあります。
そういうときに静的な配列型から動的な配列型を作るテンプレートを書いておきました。

import std.traits;

template toDynamic(T){
    static if (isStaticArray!(T)){
        static if (isStaticArray!(typeof(T[0]))){
            alias toDynamic!(typeof(T[0]))[] toDynamic;
        } else {
            alias typeof(T[0])[] toDynamic;
        }
    } else {
        alias T toDynamic;
    }
}

void main(){
    writefln(typeid(typeof(["hoge", "hige"])));             // char[4][2]
    writefln(typeid(toDynamic!(typeof(["hoge", "hige"])))); // char[][]
}

動的な配列型を渡されるとマズイ部分にはとりあえず的に適用しておきましょう、という感じです。
isStaticArrayテンプレートは確か0.176で std.traits に追加されたもので、そのまんまの意味です。
追記:再帰的に適用させるよう修正