[C++] allocation free error Status
Describe the enhancement requested
In many situations, it'd be beneficial to have an error Status which was copyable without using the heap. For example, this is a frequent pain point with Result<T>. We want Result to be default constructible even if T isn't, so a defaulted Result is an error but this requires heap allocating a Status::State which we immediately overwrite. Similarly, if the value or error is moved out of a Result we'd like to avoid managing the stored object and wind up heap allocating a flag.
Allowing some Status objects to have static lifetime (for example, by tagging the state_ pointer or adding bool Status::State::is_static) should not have an effect on the critical hot paths of moving a status or skipping deletion of ok status. Copying will get slightly slower since we need to branch on state_->is_static, but that's already quite slow due to heap interaction.
Component(s)
C++
FWIW, absl::Status uses pointer tagging for its junk value: https://github.com/abseil/abseil-cpp/blob/master/absl/status/status.h#L901-L903
Issue resolved by pull request 44493 https://github.com/apache/arrow/pull/44493