The type to check
An std.meta.AliasSeq with all possible target types of an implicit conversion T.
If T is a class derived from Object, the the result of TransitiveBaseTypeTuple is returned.
If the type is not a built-in value type or a class derived from Object, the an empty std.meta.AliasSeq is returned.
Note: The possible targets are computed more conservatively than the language allows, eliminating all dangerous conversions. For example, ImplicitConversionTargets!double does not include float.
1 import std.meta : AliasSeq; 2 3 static assert(is(ImplicitConversionTargets!(ulong) == AliasSeq!(float, double, real))); 4 static assert(is(ImplicitConversionTargets!(int) == AliasSeq!(long, ulong, float, double, real))); 5 static assert(is(ImplicitConversionTargets!(float) == AliasSeq!(double, real))); 6 static assert(is(ImplicitConversionTargets!(double) == AliasSeq!(real))); 7 8 static assert(is(ImplicitConversionTargets!(char) == AliasSeq!( 9 wchar, dchar, byte, ubyte, short, ushort, int, uint, long, ulong, float, double, real 10 ))); 11 static assert(is(ImplicitConversionTargets!(wchar) == AliasSeq!( 12 dchar, short, ushort, int, uint, long, ulong, float, double, real 13 ))); 14 static assert(is(ImplicitConversionTargets!(dchar) == AliasSeq!( 15 int, uint, long, ulong, float, double, real 16 ))); 17 18 static assert(is(ImplicitConversionTargets!(string) == AliasSeq!(const(char)[]))); 19 static assert(is(ImplicitConversionTargets!(void*) == AliasSeq!(void*))); 20 21 interface A {} 22 interface B {} 23 class C : A, B {} 24 25 static assert(is(ImplicitConversionTargets!(C) == AliasSeq!(Object, A, B))); 26 static assert(is(ImplicitConversionTargets!(const C) == AliasSeq!(const Object, const A, const B))); 27 static assert(is(ImplicitConversionTargets!(immutable C) == AliasSeq!( 28 immutable Object, immutable A, immutable B 29 )));