(I am looking for rough corners in D, or in my knowledge of D.) In this page: http://www.digitalmars.com/d/2.0/templates-revisited.html
In the section "Template Parameters" there is written: P:P*, // P must be a pointer type ----------------- So I have written this D2 program: template IsPointer1(T) { enum bool IsPointer1 = is(T : T*); } void main() { int* ptr; static assert(IsPointer1!(typeof(ptr))); // Err } But it asserts, do you know why? ----------------- Then I have written a different program: template IsPointer2(T) { enum bool IsPointer2 = is(typeof(*T)) || is(T == void*); } void main() { int* ptr; static assert(IsPointer2!(typeof(ptr))); // OK int[] arr; static assert(!IsPointer2!(typeof(arr))); // Err } Do you know why IsPointer2 is true for the dynamic array type too? (I know in std.traits of Phobos 2 there is an isPointer). Thank you, bye, bearophile