TIL: auto struct members
Basile B. via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Oct 18 20:30:06 PDT 2016
On Tuesday, 18 October 2016 at 22:12:47 UTC, Ali Çehreli wrote:
> It may be embarrassing to discover this fact so late but you
> can define struct members as 'auto':
>
> import std.range;
> import std.algorithm;
>
> struct S {
> auto r = only("a", "b").cycle; // <-- WOW!
> }
>
> pragma(msg, typeof(S.r));
> /* Prints:
> * Cycle!(OnlyResult!(string, 2LU))
> */
>
> // It's extra cool that S and the whole construct is @nogc pure
> nothrow
> // (In that regard, only() is better than an array as the
> latter cannot
> // be @nogc. i.e. [ "a", "b", "a" ] cannot be @nogc.)
> void foo() @nogc pure nothrow {
> assert(S().r.take(3).equal(only("a", "b", "a")));
> }
>
> void main() {
> }
>
> Ali
>
> P.S. I propose a new attribute, @cool, which should mean '@nogc
> pure nothrow'. :o)
It also works if it's an enum, but without surprise because this
kind of enums are grammatically the same as an auto declaration.
More information about the Digitalmars-d-learn
mailing list