digitalmars.D.learn - isVariantN - is expression doesn't match
- Piotr Szturmaj (36/36) Mar 23 2011 I wrote simple template to test VariantN type (and thus Algebraic and
I wrote simple template to test VariantN type (and thus Algebraic and Variant). template isVariantN(T) { static if (is(T X == VariantN!(N, Types), uint N, Types...)) enum isVariantN = true; else enum isVariantN = false; } but testing against Variant yields false: static assert(isVariantN!(Variant)); // fail Variant is declared as an alias to VariantN: alias VariantN!(maxSize!(creal, char[], void delegate())) Variant; which is equivalent to VariantN!(20u) on 32 bit DMD 2.052: static assert(is(Variant == VariantN!(20u))); // pass Strange thing is when I set maxSize other than 20u then isVariantN yields true: static assert(isVariantN!(VariantN!(21u))); // pass static assert(isVariantN!(VariantN!(20))); // pass, 20 as int static assert(isVariantN!(VariantN!(20u))); // fail, same as Variant If I add at least one type then it passes even for 20u maxSize. static assert(isVariantN!(VariantN!(21u, int))); // pass static assert(isVariantN!(VariantN!(20, int))); // pass, 20 as int static assert(isVariantN!(VariantN!(20u, int))); // pass What is going on here? I also have question regarding integral type aliases such as size_t. For example I can't use size_t in is expression: template isVariantN(T) { static if (is(T X == VariantN!(N, Types), size_t N, Types...)) enum isVariantN = true; else enum isVariantN = false; } Error: undefined identifier size_t TIA
Mar 23 2011