Dは、暗黙的な関数のインスタンス化中に最上位の配列のconstを破棄し、明示的なものの場合はそのままにします。コードを検討してください:
// main.d
import std.stdio;
void foo( T )( T val )
{
writeln( typeid( T ) );
}
void main()
{
const int[] arr;
writeln( typeid( arr ) ); // actual type
foo( arr ); // implicit instantiation
foo!( typeof( arr ) )( arr ); // explicit instantiation
}
...そして出力:
$ dmd main.d && ./main
const(const(int)[])
const(int)[]
const(const(int)[])
ご覧のとおり、暗黙的なインスタンス化の場合、トップレベルのconstが失われました。このバグ、機能、または私の誤解ですか?