import std.variant; class C { } struct S { C a; alias a this; } S s = S(new C()); auto v = Variant(s); // compile error /opt/compilers/dmd2/include/std/traits.d(3636): Error: template instance std.traits.BaseClassesTuple!(S) does not match template declaration BaseClassesTuple(T) if (is(T == class)) /opt/compilers/dmd2/include/std/traits.d(4054): Error: template instance std.traits.TransitiveBaseTypeTuple!(S) error instantiating /opt/compilers/dmd2/include/std/variant.d(263): instantiated from here: ImplicitConversionTargets!(S) /opt/compilers/dmd2/include/std/variant.d(632): instantiated from here: handler!(S) /opt/compilers/dmd2/include/std/variant.d(548): instantiated from here: opAssign!(S) /d296/f123.d(10): instantiated from here: __ctor!(S)
this is a easy-to-fix-bug in std.traits.ImplicitConversionTargets, I take.
https://github.com/dlang/phobos/pull/4342
@berni44 created dlang/phobos pull request #7313 "Fix Issue 15940 - ImplicitConversionTargets and class alias in struct" fixing this issue: - Fix Issue 15940 - ImplicitConversionTargets and class alias in struct https://github.com/dlang/phobos/pull/7313
dlang/phobos pull request #7313 "Fix Issue 15940 - ImplicitConversionTargets and class alias in struct" was merged into master: - 2584fd837f700bf3bf08071162390d02af0341af by Bernhard Seckinger: Fix Issue 15940 - ImplicitConversionTargets and class alias in struct https://github.com/dlang/phobos/pull/7313