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