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