Hi the folks,

Could you please share your wisdom with me? I wonder why the following code:
```
import core.stdc.stdlib;

Foo[] pool;
Foo[] foos;

auto buff = (Foo*)malloc(Foo.sizeof * 10);
pool = buff[0 .. 10];
foos = pool[0 .. 0 ];

// Now let's allocate a Foo:
Foo* allocatedFoo;
if (foos.length < foos.capacity) { // <= Error: TypeInfo cannot be used with -betterC allocatedFoo = foos[0 .. $ + 1]; // <= Error: TypeInfo cannot be used with -betterC
}
```
fails to compile because of `foos.capacity` and `foos[0 .. $ + 1]`. Why do these two innocent looking expressions require TypeInfo? Aren't slices basically fat pointers with internal structure that looks like this:
```
struct Slice(T) {
  size_t capacity;
  size_t size;
  T*     memory;
}
```
?

It's weird that `TypeInfo` (being a run-time and reflection specific thing) is required in this particular case. Shouldn't static type checking be enough for all that?

Thanks in advance,
--
Oleksii

Reply via email to