Annoying deprecation messages when using EnumMembers with enum that has deprecated members

Sönke Ludwig sludwig+d at outerproduct.org
Wed Oct 9 17:38:34 UTC 2019


Am 08.10.2019 um 13:50 schrieb FeepingCreature:
> On Tuesday, 8 October 2019 at 10:06:18 UTC, Jonathan M Davis wrote:
>> A related issue is the -de flag, which arguably is really bad in that 
>> it makes it so that is expressions and __traits(compiles, ...) 
>> expressions have a different result depending on whether -de is used 
>> or not, because -de turns deprecation messages into errors. Meaning 
>> that code that compiled just fine before the deprecation may not 
>> compile anymore, or it may compile with different behavior.
>>
> 
> I'm gonna argue this :) -de makes sense if one interprets it as 
> "generate the code that would result if all deprecated symbols were 
> removed." Of course this doesn't quite work right with stuff like final 
> switch and enums... but it works with pretty much everything else. (?)
> 
> Should __traits(allMembers) ignore deprecated enum members with -de? 
> Under this interpretation, it seems that it should.
> 
> And regarding expressions having a different result, well, yes, just 
> like they'll have when the deprecated symbol is removed. :)
> 
> Separately: the problem with unittest and deprecations is that a 
> "deprecated unittest" results in a deprecated unittest function in 
> __traits(getUnitTests), which there's no way to call without incurring 
> recursive deprecation all the way to deprecated void main. This is 
> arguably wrong - imo deprecated unittest shouldn't mean the *test* is 
> deprecated, just that it tests a deprecated feature. This can be seen by 
> the fact that D's runtime calls deprecated unittests with no warning, 
> -de or otherwise. So you should be able to call them from framework code 
> too.

For the particular issue of filtering out deprecated members, I've 
written a little workaround some time ago, using the fact that warnings 
inside of _traits(compiles) are gagged:

https://github.com/s-ludwig/dynamic/blob/79b73a9afe14432da6917fd519563655300092d1/source/dynamic.d#L82-L85

It doesn't help when actual access to these members is desired.


More information about the Digitalmars-d mailing list