might as well add `pure` and `nothrow` too.