ImplicitConversionTargets

template ImplicitConversionTargets (
T
) {}

Parameters

T

The type to check

Return Value

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.

Examples

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 )));

See Also

Meta

Suggestion Box / Bug Report