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 丢失了。这是错误,功能还是我的误解?