Assume the following sketch:
struct C {
(either T or T&) m_t;
C(T& t):
(instantiate m_t as T& m_t(t))
{}
C(T&& t):
(instantiate m_t as T(t))
{}
};
such that a C either has or has not ownership of t, depending on how the C was constructed. Is that possible, possibly without resorting to shared_ptr and thus having to move everything to heap? I'm trying around with std::variant, but without success so far.
Something along these lines perhaps:
Would also need a copy and/or move constructor (the implicit one won't do the right thing); and the copy/move assignment operators would have to be deleted as I don't think they could be implemented reasonably. One way to salvage assignment would be to replace
T&withstd::reference_wrapper<T>; it behaves almost like a reference, but can be rebound.