This makes sure DeviceManagement::try_create_device will call the static factory function (if available) instead of directly calling the constructor, which will allow us to move OOM-fallible calls out of Device constructors.