isImplictlyConvertible for Variadic Templates

rpeio via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jun 26 17:59:24 PDT 2017


I was wondering whether there was a method built into phobos for 
expanding the "isImplictlyConvertible" template to work for 
variadic templates.

To explain what I mean by this, normally 
"isImplicitlyConvertible(To, From)" checks whether or not a type 
"From" may implicitly be converted to a type "To".

struct Foo(V)
{
     this(V)(V value) if (isImplictlyConvertible!(V, T))
     {
	// do stuff
     }
}

When "From" is variadic, I would like it for each type in "From" 
to be checked whether it may implicitly be converted to type "To".

struct Foo(V)
{
     this(Vs...)(Vs values) if (eachIsImplictlyConvertible!(T, Vs))
     {
	// do stuff
     }
}

This can be accomplished off the top of my head by taking the 
code from std.traits for "isImplicitlyConvertible" and making the 
following change.

template eachIsImplictlyConvertible(To, From...)
{
     enum bool eachIsImplictlyConvertible = is(typeof({
         void fun(ref From vs)
         {
             void gun(To) {}
             foreach (v; vs) // +
             {
                 gun(v);
             }
         }
     }));
}

Implementing this means I have an ostensibly valid method of 
accomplishing what I desire. Though, I am curious whether there's 
a way to facilitate this that is currently available in phobos, 
without having to implement another traits function.

Thanks,
rpeio






More information about the Digitalmars-d-learn mailing list