Implicit conversion of struct with methods to immutable in pure function fails

Simen Kjærås simen.kjaras at gmail.com
Tue Jul 17 06:24:12 UTC 2018


On Monday, 16 July 2018 at 13:13:53 UTC, Timoses wrote:
> On Monday, 16 July 2018 at 12:00:57 UTC, Simen Kjærås wrote:
>> On Monday, 16 July 2018 at 11:43:03 UTC, Timoses wrote:
>>> Why does this fail?
>>
>> It doesn't. Not using DMD 2.081.1 under Windows, at least. I 
>> tried adding a bitfield since you mentioned it, but it 
>> compiles nicely for me. Which version of DMD are you using, 
>> and are you having the issues with the exact code you posted 
>> here?
>>
>> --
>>   Simen
>
> https://run.dlang.io/is/Pgs527
>
> I'm on 2.080.1. But above is on latest 2.081.1 I believe.
>
> Note that the bottom code snippet in the original post does 
> work, while the first one does not.

That makes sense. The problem is F has a context pointer to the 
main() block, since it's a non-static struct with methods inside 
a block. It doesn't actually use the context pointer for 
anything, so it possibly shouldn't have one, but it does, so we 
have to work around it.

The fix is to mark F as static, or move it outside the main() 
block.

--
   Simen


More information about the Digitalmars-d-learn mailing list