A destructor causes a type to be not POD, which prevents it from being enregistered. scope(exit) does not do this.

Also, if you take some care and the code covered by scope(exit) is nothrow, then scope(exit) does not set up exception handling frames - it becomes straightforward code.