3
struct A{
int[3] _data;
ref int opIndex(size_t i) { return _data[i]; }
int opIndex(size_t i) const{ return _data[i]; }
}
T fun(T)(const ref T a){
T ai = a;
swap(ai[0], ai[1]); // error
return ai;
}
immutable A a = A();
immutable A b = fun(a);
void main(){ }
上記のコードは次のエラーを与える:opIndexの適切な実装とは何ですか?
Error: ai.opIndex(0LU) is not an lvalue
Error: ai.opIndex(1LU) is not an lvalue
called from here: fun(a)
ai
はa
のコピーであり、それは左辺値であるので、私はエラーを取得する理由を私は理解していません。
割り当てがありますか? – Arlen
ああ、私は、スワップを忘れて、参照してください。あなたが実際のエラーを取得しないようで、スワップのコメントを外してみてください。新しいエラーが出ます: 'エラー:静的変数はコンパイル時に参照できません.'これは実際の問題です。さらに 'T ai = a;'はあなたに不変の構造体を与えます。 – dav1d
まあ、 'T ai = a;'は不変のものを与えるべきではありません。そのように振る舞わないようにするにはどうしてですか? – Arlen