Why this fails when using unittest?

Machine Code jckj33 at gmail.com
Fri Jun 7 16:30:34 UTC 2019


On Thursday, 6 June 2019 at 21:02:37 UTC, Steven Schveighoffer 
wrote:
> On 6/6/19 1:49 PM, Adam D. Ruppe wrote:
>> On Thursday, 6 June 2019 at 17:40:17 UTC, Machine Code wrote:
>>> outside an unittest, this compiles fine:
>>>
>>>     struct A
>> 
>> try making it `static struct` instead
>> 
>> 
>>>> cannot implicitly convert expression "hehe" of type string 
>>>> to A
>>>
>>> Why does inside a unittest it doesn't work? the constructor 
>>> this(string) {} seems to get disabled.
>> 
>> My suspicion is it is trying to access the context of the 
>> unittest as a hidden paramater to that constructor there... 
>> and in an enum, it can't, just stupid compiler didn't think to 
>> mention the hidden arg here.
>> 
>> my guess.
>
> Yes, correct guess. A unittest block is actually a function, so 
> it's considered an inner struct with a hidden context pointer.
>
> -Steve

Intesting, I also tried to declare it inside a function, that did 
not work either. Is this hidden context pointer a current 
limitation in CTFE? I've tried to declare the struct at module 
level and run the functions on static this() to workaround that 
but to finish, I'd like to eble to run the code in static main() 
only when unnitest is enabled but so I haven't manged to do that.

*Imaginary code* would be:

unittest
{
	enum enabled = true;
}
else
{
     enum enabled = true;
}

but I was on my mind unittest was similar to static if() but as 
it's like a function, there are no else let alone acess to enum 
enabled as true, outside the block but the idea is run (or even 
only declare) a piece of code (which includes that struct) only 
if we are an unittest.




More information about the Digitalmars-d-learn mailing list