Thread overview | ||||||
---|---|---|---|---|---|---|
|
August 17, 2017 Implicit conversion from const to mutable | ||||
---|---|---|---|---|
| ||||
Is it possible to make structs containing slices support implicit conversion from const to mutable? I tried adding a postblit that dupes the member 'a'. That didn't work. struct A { int[] a; } void main() { static assert (is(const(A) : A)); // fails } |
August 17, 2017 Re: Implicit conversion from const to mutable | ||||
---|---|---|---|---|
| ||||
Posted in reply to Balagopal Komarath | On 8/17/17 3:24 PM, Balagopal Komarath wrote: > Is it possible to make structs containing slices support implicit conversion from const to mutable? This should "work". I don't think your static assert will pass, but the main function below should run. struct A { int[] a; A dup() const { return A(a.dup); } alias dup this; } void main() { const A a; A a2 = a; } However, this results in a segfault as far back as 2.064, and 2.063 doesn't seem to like it (but maybe because alias this wasn't supported? I'm not sure). https://issues.dlang.org/show_bug.cgi?id=17759 -Steve |
August 17, 2017 Re: Implicit conversion from const to mutable | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Thursday, 17 August 2017 at 20:22:09 UTC, Steven Schveighoffer wrote:
>
> This should "work". I don't think your static assert will pass, but the main function below should run.
Thanks. But, isn't my static assert testing for exactly this?
|
August 17, 2017 Re: Implicit conversion from const to mutable | ||||
---|---|---|---|---|
| ||||
Posted in reply to Balagopal Komarath | On 8/17/17 5:28 PM, Balagopal Komarath wrote:
> On Thursday, 17 August 2017 at 20:22:09 UTC, Steven Schveighoffer wrote:
>>
>> This should "work". I don't think your static assert will pass, but the main function below should run.
>
> Thanks. But, isn't my static assert testing for exactly this?
>
I might be wrong. It's hard to tell, because the compiler doesn't work with the struct itself.
If I change the alias this to something else, your form of conversion does work. But the compiler may recognize that specific form and still disallow it. IMO, that would be a further bug.
-Steve
|
Copyright © 1999-2021 by the D Language Foundation