xxxxxxxxxx
import core.memory : pureMalloc, pureFree;
import std.algorithm : move, moveEmplace;
import std.traits : hasElaborateDestructor;
struct NonCopyable {
this(this) ;
}
struct Unique(T) {
this(this) ;
T* m_data;
this(T data) {
m_data = cast(T*) pureMalloc(T.sizeof);
moveEmplace(data, *m_data);
}
~this() {
if(m_data) {
static if(hasElaborateDestructor!T) (cast(Unqual!T*) m_data).__xdtor;
pureFree(m_data);
}
}
}
void main() {
NonCopyable a;
auto ua = Unique!NonCopyable(move(a)); // fine
const NonCopyable const_a;
auto const_ua = Unique!(const NonCopyable)(move(ca)); // error, why???
}