
Unfortunately I think any nontrivial constructor at all makes a class a non-POD. So you may have to accept the uninitialized state in order to interact well with MPI. You might consider whether you need a low-level representation class as well as a higher-level wrapper with stronger invariants.
I am very unsure of that POD... and the "uninitialized state"... Yuk. Are we sure it is that need to "interact well with MPI"? I am reading about MPI I see that for "normal" classes it deploys Boost.Serialization. With that I think we can make uuid serialization pretty close (efficiency-wise) to no-serialization (if we use the binary archive and simply stuff out internal data buffer into the archive). And Boost.Serialization certainly has no that "uninitialized state ... to interact well" requirement. Even better, the load() side of Boost.Serialization is easily tailored for classes without the default constructor (Do it all the time. Love the library). Best, V.