I noticed that core.internal.traits
contains a lot of stuff that is exactly the same in std.traits
and std.meta
. Is that for legacy reasons or should new additions be also redundant (and why)?
For example, there's redundant AliasSeq
which I understand because it's kind of trivial and public-importing is on par with it. (I'd still prefer the import.)
Another example is Unconst
, Unqual
, hasElaborate
Whatever
that use a public import, but for whatever reason, they encapsulate the import and make an unnecessary template instance. None simply do
public import core.internal.traits : Unconst;
but follow the pattern
template Unconst(T)
{
import core.internal.traits : CoreUnconst = Unconst;
alias Unconst = CoreUnconst!(T);
}
I guess there's a good reason to do this and I'd like to understand.
In core.internal.traits
there is a lot of stuff commented with "taken from". Why all this duplication? Are PRs to Phobos welcome that public-import the core
stuff? Are PRs to DRuntime welcome that move improved stuff from Phobos to it (and replace the Phobos stuff by a public import)?