Daniel Keep: > You do realise that "Template Parameters" are a completely different > thing to "is expressions", right?
Nope. And from the other answers by Moritz and Ellery it seems I am not alone :-) You are right, this works: template IsPointer1(T:T*) { enum bool IsPointer1 = true; } template IsPointer1(T) { enum bool IsPointer1 = false; } void main() { static assert(IsPointer1!(int*)); static assert(!IsPointer1!(int)); static assert(!IsPointer1!(int[])); } This syntax looks too much similar to the syntax with is(): template IsPointer1(T:T*) { It's a syntax collision. You realize that I will not be the only one to fall in this little trap. Bye and thank you, bearophile