Simen kjaeraas wrote:
Piotr Szturmaj <bncr...@jadamspam.pl> wrote:

static assert(isNullable!(Nullable!int));

Question is, what I'm doing wrong?

The problem here is that Nullable!T is not a real type. Hence,
Nullable!int is actually
Algebraic!(int,void*). Checking for that apparently does not work as
simply as one might
hope.

Algebraic is also an alias for VariantN (which is real type):

template Algebraic(T...)
{
    alias VariantN!(maxSize!(T), T) Algebraic;
}

however this check also yields false:

static if (is(T X == VariantN!(U), U...))

but this works:

static if (is(T == Nullable!int))

so, I was a bit confused...

So, instead you should create a wrapper. This works:


struct Nullable(T) {
Algebraic!(T, void*) Nullable;
alias Nullable this;
}

template isNullable(T) {
static if (is(T X == Nullable!(U), U))
enum isNullable = true;
else
enum isNullable = false;
}

static assert(isNullable!(Nullable!int));


Thanks! I've already used wrappers like that, but I though it's possible to match aliases directly.

regards,
Piotr

Reply via email to