On Fri, 11 May 2012 13:47:13 -0400, Mehrdad <[email protected]> wrote:

On Friday, 11 May 2012 at 17:37:11 UTC, Artur Skawina wrote:
On 05/11/12 19:22, Mehrdad wrote:
On Friday, 11 May 2012 at 17:19:28 UTC, kenji hara wrote:
This is expected behavior.

'alias this' works as proper super type.

struct S { T[] data; alias data this; }

In this code, S behaves as it is derived from T[] .

Following to this view, the definition of opIndex in S overrides (and
hides) T[]'s opIndex completely.

Kenji Hara
How do you overcome this, in the case where you don't know the data type of 'data' (so you don't know what the overloads might look like, maybe because it's a template)?

Not quite sure what you mean, but

    auto opIndex(A...)(A a) { return data[a]; }

artur

What if it's const/pure/@safe/whatever though? Or the parameters have some attributes?

(I guess this is a more general problem than opIndex specifically, though.)

D solves this by automatically adding pure @safe nothrow to a template function, wherever it is possible.

However, it doesn't do this for const or immutable.

-Steve

Reply via email to