On further reflection here, I think that pure and nothrow (at least) are questionable constraints for a `save` function.  In this case, the code allows them, but in general you can't guarantee that future implementations of `save` might not allocate memory etc., which would prevent both properties.

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?