Allocating memory (with the GC) is both pure and nothrow: It's pure in the sense that the GC is not considered a part of the global state, and it's nothrow, as a failure throw an `Error`.

> I'm not sure what the typical protocol is here -- is the norm to make the constraints as strong as they can be for the given implementation, or does some consideration need to be made for the potential for constraints to need to be loosened in future?

Bit of both I guess.