is pointer

bearophile bearophileHUGS at
Fri Mar 19 16:29:24 PDT 2010

(I am looking for rough corners in D, or in my knowledge of D.)

In this page:

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,

More information about the Digitalmars-d-learn mailing list