Deprecation message sources
Steven Schveighoffer
schveiguy at gmail.com
Tue Sep 17 19:31:53 UTC 2019
Hi,
I just upgraded my compiler from 2.084 to 2.088, and I'm getting scores
of deprecation messages. One thing I've realized is that most of these
messages are generated by calls outside my code. These deprecation
messages are intended to tell you where you are calling them, but end up
telling you where phobos, or vibe.d, or whatever, is calling them.
For example, I get messages like:
home/steves/.dvm/compilers/dmd-2.088.0/linux/bin/../../src/phobos/std/traits.d(3687,61):
Deprecation: function std.typecons.Nullable!string.Nullable.get_ is
deprecated - Implicit conversion with alias Nullable.get this will be
removed after 2.096. Please use .get explicitly.
The line in question is commented below:
template hasElaborateAssign(S)
{
static if (isStaticArray!S && S.length)
{
enum bool hasElaborateAssign =
hasElaborateAssign!(typeof(S.init[0]));
}
else static if (is(S == struct))
{
/***** the line below ****/
enum hasElaborateAssign =
is(typeof(S.init.opAssign(rvalueOf!S))) ||
is(typeof(S.init.opAssign(lvalueOf!S))) ||
anySatisfy!(.hasElaborateAssign, FieldTypeTuple!S);
}
else
{
enum bool hasElaborateAssign = false;
}
}
I'm not calling hasElaborateAssign from anywhere in my code. So 1. how
am I supposed to know where this call is being generated from, and 2.
I'm assuming this is happening inside a static if buried deep somewhere
in library code, so how am I supposed to fix it?
I'd hate to say the answer is to special case Nullable for so many
functions, but what other alternative is there?
-Steve
More information about the Digitalmars-d-learn
mailing list