On Tuesday, 26 February 2013 at 16:28:59 UTC, Ivan Kazmenko wrote:
Hi!

I have recently experimented with ways to express the exact instantiated type of a generic struct, and found that I can in some cases use "this" as that type.


1) D allows omitting parameter names in function definitions which are replaced by implicitly created _param_XXX.

2) This as a type in parameter list replaces type of this.

What you observe is consequence of combination of this rules. The most unintuitive is that applying attribute to postblit declaration makes it a regular constructor which takes argument of that struct type.


And so I wonder:

(1) Should I refrain from using this as a type, is it a bug?

Better to avoid such usage.

(2) A matter of style: what is the idiomatic way to take the exact type of a templated struct? For example, which method signature to return a typeof(this) value is "better" in which way if all have the same effect:
-----
struct S (A, B, C)
{
...
        auto method () {...}
        S method () {...}
        S !(theA, theB, theC) method () {...}
        typeof (this) method () {...}
}
-----
Note that S, theA, theB and theC can get lengthy.

You can use template this parameter in templates and avoid in non-templates.

(3) Is the usage of unnamed parameters and _param_### a language feature or an implementation-specific detail I should not ever use?

-----
Ivan Kazmenko.

It is implementation-specific detail.

Reply via email to