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() { } AliP.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.
