std.array.array
コンパイル時に常に機能するように変更しました。次のようになります。
ForeachType!Range[] array(Range)(Range r)
if (isIterable!Range && !isNarrowString!Range)
{
auto a = appender!(ForeachType!Range[])();
foreach (e; r)
{
a.put(e);
}
return a.data;
}
そして使用法:
struct Type
{
int[] xs;
this(int[] r) { this.xs = r.array; }
}
enum Type t1 = Type([]);
static if (t1.xs.length) { } // Error: expression null.length is not constant
私の理解に基づいて、r
が空の範囲である場合、はをarray()
返しますnull
。null
この点で、と空の配列の間に違いがあるはずですか?
に置き換えるreturn a.data;
と問題は解決array()
するreturn a.data.length ? a.data : [];
ので、違いがあると思いますか?
問題は、これはコンストラクターでのみ発生するということです。次の場合、エラーは発生しません。
enum int[] t1 = iota(0,0).array;
static if (t1.length) { }
null
だから私はとの間に違いはないと思い[]
ますか?よくわかりません。