Am 29.03.2013 13:10, schrieb Adam D. Ruppe:
Is that fairly new in D? I'm almost certain I tried it and it didn't
work when I originally wrote this code (which was a couple years ago).
Yes it's fairly new. I think dmd 2.060 or something along that line. I
tend to use it a lot because its so awesome ^^
For example my streaming interface for binary streams:
interface IInputStream
{
public:
final size_t read(T)(ref T data) if(!thBase.traits.isArray!T)
{
static assert(!is(T == const) && !is(T == immutable), "can not
read into const / immutable value");
return readImpl((cast(void*)&data)[0..T.sizeof]);
}
final size_t read(T)(T data) if(thBase.traits.isArray!T)
{
static assert(!is(typeof(data[0]) == const) &&
!is(typeof(data[0]) == immutable), "can not read into const / immutable
array");
return readImpl((cast(void*)data.ptr)[0..(arrayType!T.sizeof *
data.length)]);
}
size_t skip(size_t bytes);
protected:
size_t readImpl(void[] buffer);
}
Kind Regards
Benjamin Thaut