With the features of D2 you can get pretty close to implementing scope classes as a template struct:
private final class PlacementNewClass(T) : T { // forward constructors here! new(uint size, byte[__traits(classInstanceSize, PlacementNewClass)] mem) { return &mem; } delete(void* addr) {} } struct StackClass(T) { // forward constructors here! void construct() { new(memory) PlacementNewClass!(T); } ~this() { T tmp = cast(T)this; delete tmp; } // should be opImplicitCast T opCast() { return cast(T)cast(void*)&memory; } T opDot() { return cast(T)cast(void*)&memory; } byte[__traits(classInstanceSize, PlacementNewClass!(T))] memory; } Instances of StackClass!(C) behave pretty much like scope C, except they are not limited to function local variables. Unless there's a major difference to 'scope' I missed, I think that with the addition of a few generic features it should be possible to move it into a library entirely. In particular, D would need opImplicitCast as well as a way of accessing and forwarding constructors to make this work nicely.