CTransaction default constructor was removed in https://github.com/bitcoin/bitcoin/commit/faac31521bb7ecbf999541cf918d3750ff589de4 which exposed two places where libmultiprocess was inadvertently assuming default constructors were defined.
In both places, it would never actually call the default constructor at runtime, just rely on it being present during compile time code generation.
In the first case, compiler would fail while trying to figure out the type of std::invoke_result_t<EmplaceFn> where EmplaceFn called make_shared<CTransaction>(). This was fixed by just the moving expression into an unexpanded template method.
In the second case code was calling Optional<CTransaction>::emplace() to default-initialize CTransaction& output-arguments. It was fixed by moving into a constexpr-if that would be known to be false for output arguments at compile time.