Testing implicit conversion to template instance with is() expression
via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Mar 15 11:33:30 PDT 2015
On Sunday, 15 March 2015 at 17:03:42 UTC, Marc Schütz wrote:
> https://issues.dlang.org/show_bug.cgi?id=14286
>
> In the meantime, does someone know of a suitable workaround?
I found the following workaround. Not beautiful, but it works:
enum isValue(alias T) = __traits(compiles, typeof(T));
template isConvertibleToInstanceOf(alias From, alias To)
if(isValue!From)
{
enum isConvertibleToInstanceOf =
isConvertibleToInstanceOf!(typeof(From), To);
}
template isConvertibleToInstanceOf(From, alias To)
if(!is(From == struct) && !is(From == class) && !is(From ==
interface))
{
enum isConvertibleToInstanceOf = false;
}
template isConvertibleToInstanceOf(From, alias To)
if(is(From == struct) || is(From == class) || is(From ==
interface))
{
// workaround for
https://issues.dlang.org/show_bug.cgi?id=14286
import std.typetuple : anySatisfy;
enum aliasThisConvertible(string name) =
isConvertibleToInstanceOf!(mixin("typeof(From." ~ name ~ ")"),
To);
enum isConvertibleToInstanceOf =
anySatisfy!(aliasThisConvertible,
__traits(getAliasThis, From)) ||
is(From : To!Args, Args...);
}
More information about the Digitalmars-d-learn
mailing list