digitalmars.D.learn - Can you move a disabled this struct in to a container type if it's an
- aliak (27/27) Dec 12 2018 Ie:
- Paul Backus (4/18) Dec 12 2018 The only error I get when I compile this has to do with incorrect
- aliak (5/26) Dec 13 2018 Crap! So sorry, this was supposed to be this(this) and that auto
Ie: struct S { disable this(); this(int i) {} } struct Container(T) { T value; this(auto ref T value) { this.value = value; } } void main() { auto a = Container!S(S(3)); // can't do this. } I can build a custom constructor for Container that makes this work: static auto construct(Args...)(auto ref Args args) { import std.algorithm: move; auto value = T(args); auto opt = Container!T.init; opt.value = move(value); return move(opt); } But is there a way to do it without adding a custom constructor type? Cheers, - Ali
Dec 12 2018
On Wednesday, 12 December 2018 at 20:05:18 UTC, aliak wrote:Ie: struct S { disable this(); this(int i) {} } struct Container(T) { T value; this(auto ref T value) { this.value = value; } } void main() { auto a = Container!S(S(3)); // can't do this. }The only error I get when I compile this has to do with incorrect use of `auto ref`. If I change the constructor's signature to `this()(auto ref T value)`, it works fine.
Dec 12 2018
On Wednesday, 12 December 2018 at 21:11:38 UTC, Paul Backus wrote:On Wednesday, 12 December 2018 at 20:05:18 UTC, aliak wrote:Crap! So sorry, this was supposed to be this(this) and that auto ref is not supposed to be there :( Posted new (and correct) message: https://forum.dlang.org/thread/sasdsmxmikxqfxhtbpyo forum.dlang.orgIe: struct S { disable this(); this(int i) {} } struct Container(T) { T value; this(auto ref T value) { this.value = value; } } void main() { auto a = Container!S(S(3)); // can't do this. }The only error I get when I compile this has to do with incorrect use of `auto ref`. If I change the constructor's signature to `this()(auto ref T value)`, it works fine.
Dec 13 2018