Re: ImplicitConversionTargets opposite

2015-05-22 Thread via Digitalmars-d-learn

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?


I doubt that, because it's an open set (alias this, inheritance). 
However, it should be possible to iterate over all types in a 
given module, and select only those that are implicitly 
convertible to your type.


Re: ImplicitConversionTargets opposite

2015-05-22 Thread Baz via Digitalmars-d-learn

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.


Re: ImplicitConversionTargets opposite

2015-05-22 Thread Baz via Digitalmars-d-learn

the line warping on this forum deserve a big slap in the face...


ImplicitConversionTargets opposite

2015-05-21 Thread Freddy via Digitalmars-d-learn

std.traits has ImplicitConversionTargets.
Is there any template that returns the types that can implicty 
convert to T?