Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
November 19, 2018 deprecated enum and to!string warnings | ||||
---|---|---|---|---|
| ||||
The following code produces 28 deprecation warnings at build time: import std.conv : to; enum Foo { bar, deprecated baz } void main() { to!string(Foo.bar); } Why is that? https://run.dlang.io/is/AdUscN |
November 19, 2018 Re: deprecated enum and to!string warnings | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vladimirs Nordholm | On Monday, November 19, 2018 12:47:44 PM MST Vladimirs Nordholm via Digitalmars-d wrote:
> The following code produces 28 deprecation warnings at build time:
>
> import std.conv : to;
>
> enum Foo {
> bar,
> deprecated baz
> }
>
> void main() {
> to!string(Foo.bar);
> }
>
> Why is that?
>
> https://run.dlang.io/is/AdUscN
You're going to get a deprecation message every time baz is used, and in order for to!string to do its thing, it uses it in a bunch of places internally. Glancing at the output there, it does look like the messages are doubled up for some reason, with each line being listed twice, which is a bit odd, and I'd have to do some digging to see why that is happening, but the fact that you're getting multiple deprecation messages is not surprising considering that you're compiling a templated function that is using a deprecated symbol. If you were calling a non-templated function, then you would just get a deprecation message at the call point, but you're calling a templated function that's then doing type introspection on the deprecated symbol, so it refers to it a lot internally.
Also, FYI, please ask questions about learning D in the D.Learn newsgroup / forum, not the general newsgroup / forum. This is for general discussion on D, not for asking questions on how to use D or how it works.
- Jonathan M Davis
|
November 19, 2018 Re: deprecated enum and to!string warnings | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vladimirs Nordholm | On 11/19/18 2:47 PM, Vladimirs Nordholm wrote:
> The following code produces 28 deprecation warnings at build time:
>
> import std.conv : to;
>
> enum Foo {
> bar,
> deprecated baz
> }
>
> void main() {
> to!string(Foo.bar);
> }
>
> Why is that?
>
> https://run.dlang.io/is/AdUscN
Ouch!
I don't know if there's a way to fix this, what I think is happening is there are multiple instantiations of the same template from different places, and each time it's used, it's going to cause a warning.
The reason you see it, even though "baz" isn't used, is likely because of the way to!string works for enums (it probably uses a switch with all the enum values as cases).
-Steve
|
November 19, 2018 Re: deprecated enum and to!string warnings | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On Monday, 19 November 2018 at 21:03:31 UTC, Jonathan M Davis wrote:
> On Monday, November 19, 2018 12:47:44 PM MST Vladimirs Nordholm via Digitalmars-d wrote:
>> [...]
>
> You're going to get a deprecation message every time baz is used, and in order for to!string to do its thing, it uses it in a bunch of places internally. Glancing at the output there, it does look like the messages are doubled up for some reason, with each line being listed twice, which is a bit odd, and I'd have to do some digging to see why that is happening, but the fact that you're getting multiple deprecation messages is not surprising considering that you're compiling a templated function that is using a deprecated symbol. If you were calling a non-templated function, then you would just get a deprecation message at the call point, but you're calling a templated function that's then doing type introspection on the deprecated symbol, so it refers to it a lot internally.
>
> [...]
Thank you for your answer Jonathan.
And yes, I realised after posting that D.Learn would be a better place for this type of question. Will keep this in mind until next time :-)
Best regards,
Vladimirs Nordholm
|
November 19, 2018 Re: deprecated enum and to!string warnings | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Monday, 19 November 2018 at 21:04:02 UTC, Steven Schveighoffer wrote:
> On 11/19/18 2:47 PM, Vladimirs Nordholm wrote:
>> The following code produces 28 deprecation warnings at build time:
>>
>> import std.conv : to;
>>
>> enum Foo {
>> bar,
>> deprecated baz
>> }
>>
>> void main() {
>> to!string(Foo.bar);
>> }
>>
>> Why is that?
>>
>> https://run.dlang.io/is/AdUscN
>
> Ouch!
>
> I don't know if there's a way to fix this, what I think is happening is there are multiple instantiations of the same template from different places, and each time it's used, it's going to cause a warning.
>
> The reason you see it, even though "baz" isn't used, is likely because of the way to!string works for enums (it probably uses a switch with all the enum values as cases).
>
> -Steve
Yeah, looking at the source code I can see EnumMembers! being called, so I'll just have to work around it
|
Copyright © 1999-2021 by the D Language Foundation