pure factory function vs immutable(Foo)**
Steven Schveighoffer via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Jul 11 12:23:40 PDT 2017
On 7/11/17 2:12 PM, ag0aep6g wrote:
> On 07/10/2017 04:57 PM, ag0aep6g wrote:
>> ----
>> alias T = int;
>>
>> T** f(const T** input) pure
>> {
>> T** output;
>> return output;
>> }
>>
>> void main()
>> {
>> T i;
>> T* p = &i;
>> immutable T** r = f(&p);
>> }
>> ----
> [...]
>> Now change `T` to `alias T = immutable int;`. The program gets
>> rejected. The error message is: "cannot implicitly convert expression
>> (f(& p)) of type immutable(int)** to immutable(int**)".
>
> Filed an issue:
> https://issues.dlang.org/show_bug.cgi?id=17635
I think this is a legitimate bug.
to make sure this is correct, I added:
pragma(msg, typeof(input).stringof);
And it prints const(immutable(int)**) (as I would have expected, but
wasn't 100% sure).
So there is no way the input can be returned, as immutable(int)** cannot
be implicitly converted from const(immutable(int)**).
I think this is just a missed case in the compiler.
-Steve
More information about the Digitalmars-d-learn
mailing list