On Thursday, 21 May 2015 at 21:49:55 UTC, Freddy wrote:
std.traits has ImplicitConversionTargets.
Is there any template that returns the types that can implicty convert to T?

You can write something like this:

---
import std.stdio;
import std.traits;
import std.typetuple;

void main(string[] args)
{

    template PossibleType(From)
    {
private alias All = TypeTuple!(byte,ubyte,short,ushort,int,uint); private alias Convertible(To) = isImplicitlyConvertible!(From,To);
        public alias PossibleType = Filter!(Convertible, All);
    }

    writeln((PossibleType!int).stringof);
    writeln((PossibleType!short).stringof);
}
---

which outputs:

---
(int, uint)
(short, ushort, int, uint)
---

The idea is to reduce the list of all the possible types. It's easy because the high-order functional functions are implemented for the type list.

`All` could be a template parameter, and more filled, but to keep the example simple here it's not.

Reply via email to