On Monday, 25 January 2016 at 06:37:13 UTC, Enjoys Math wrote:
class V(T) {
public:
   this() {}
   V opIndex(size_t i, size_t j) {
     writeln("Hello, foo!");
     return this;
   }
}

main() {
   auto v = new V!int();
   auto u = v[3..4];        // ERROR
}

Error:
no [] operator overload for type the_module.V!int

You're mixing slicing and indexing. Use *opSlice* to support i..j slicing notation.

---
import std.stdio;

class V(T) {
public:
   this() {}

   V opIndex(size_t i, size_t j) {
     writeln("Indexing");
     return this;
   }

   V opSlice(size_t i, size_t j) {
     writeln("Slicing");
     return this;
   }
}

void main() {
   auto v = new V!int();
   auto w = v[3, 4]; // Indexing
   auto u = v[3..4]; // Slicing
}
---

Reply via email to