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