1

2 つの不変範囲のデカルト積を計算できないのはなぜですか?

次のコード:

import std.stdio;
import std.algorithm;

void main() {

    immutable int[] B = [ 1, 2, 3 ];
    immutable int[] C = [ 4, 5, 6 ];
    auto BC = cartesianProduct(B, C);

    writeln(BC);
}

投げる:

/usr/include/dmd/phobos/std/range.d(4199): Error: cannot modify struct result._ranges_field_1 Repeat!(immutable(int)) with immutable members
/usr/include/dmd/phobos/std/range.d(4503): Error: template instance std.range.Zip!(immutable(int)[], Repeat!(immutable(int))) error instantiating
/usr/include/dmd/phobos/std/algorithm.d(11674):        instantiated from here: zip!(immutable(int)[], Repeat!(immutable(int)))
laurent_test.d(8):        instantiated from here: cartesianProduct!(immutable(int)[], immutable(int)[])
/usr/include/dmd/phobos/std/algorithm.d(11674): Error: template instance std.range.zip!(immutable(int)[], Repeat!(immutable(int))) error instantiating
laurent_test.d(8):        instantiated from here: cartesianProduct!(immutable(int)[], immutable(int)[])
laurent_test.d(8): Error: template instance std.algorithm.cartesianProduct!(immutable(int)[], immutable(int)[]) error instantiating

さらに、2番目の最初の不変が削除された場合、それは機能します。

phobos の実装によれば、範囲の 1 つは inputRange であり、もう 1 つは forwardRange です。なぜそのようなテンプレートの制約?

4

1 に答える 1