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.

Reply via email to