does cast make an lvalue appear to be an rvalue
Daniel Davidson
nospam at spam.com
Wed Oct 16 10:50:46 PDT 2013
On Wednesday, 16 October 2013 at 17:16:39 UTC, Dicebot wrote:
>
> It works as it should. Make a mutable copy of t2 and pass it.
> Or make foo() accept const. I can't imagine a single legitimate
> use case for destroying type system in a way you want.
How do you propose to make a mutable copy *generically*?
I think a legitimate use would be the following. In the
construction of S I want to use a T to construct an R. `this(...)
immutable {}` prevents initialization of R in this case. Maybe
immutable adorning `this()` should mean it is immutable upon the
end of the construction, giving the initialization a chance to
actually initialize. In the example below a better approach would
be to have:
R createRFromT(ref const(T) t) pure {...}
but with what I'm using from phobos that is not possible.
------------------------------------------------
import std.conv;
import std.stdio;
struct R {
int[] i;
string[string] ss;
}
struct T {
int[] i;
string[string] ss;
}
struct S {
R r;
this(ref const(T) t) immutable {
createRFromT(t, r);
}
}
void createRFromT(ref const(T) t, ref R r) {
//...
}
void main() {
T t1;
auto t2 = immutable T();
auto s = immutable S(t2);
}
More information about the Digitalmars-d-learn
mailing list