 template <>
 class CIndexer<0> {
 private:
-  ssize_t size_;
-
-public:
-  __device__ ssize_t size() const {
-    return size_;
-  }
-
-  __device__ void set(ssize_t i) {
-  }
-
-  __device__ const ssize_t* get() const {
+  ptrdiff_t size_;
+
+public:
+  __device__ ptrdiff_t size() const {
+    return size_;
+  }
+
+  __device__ void set(ptrdiff_t i) {
+  }
+
+  __device__ const ptrdiff_t* get() const {
     return NULL;
   }
 };

class CArray<T, 0> {
private:
  T* data_;
  ssize_t size_;

public:
  __device__ ssize_t size() const {
    return size_;
  }

  __device__ T& operator[](const ssize_t* idx) {
    return *reinterpret_cast<T*>(data_);
  }

  __device__ T operator[](const ssize_t* idx) const {
    return (*const_cast<CArray<T, 0>*>(this))[idx];
  }

  __device__ T& operator[](ssize_t i) {
    return *reinterpret_cast<T*>(data_);
  }

  __device__ T operator[](ssize_t i) const {
    return (*const_cast<CArray<T, 0>*>(this))[i];
  }
};

    }
  }

  __device__ const ptrdiff_t* get() const {
    return index_;
  }
};
