Generalize reference-like embedding.
I.e. factor out something similar to std::remove_refernce() for making perfect embedding of reference to AnyDB.
This should help getting rid of conflicts for Sandwich<RefDB<T>>::ref(TxnDB<T>).
Note that we should allow extending those traits for other types like std::reference_wrapper<T>.
std::shared_ptr<T> and std::weak_ptr<T> are special case. We should embed smart pointers. And since that changes behavior consider adding appropriate template parameter to control reference strategy (not only weak, but strong also).
Generalize reference-like embedding.
I.e. factor out something similar to
std::remove_refernce()for making perfect embedding of reference toAnyDB.This should help getting rid of conflicts for
Sandwich<RefDB<T>>::ref(TxnDB<T>).Note that we should allow extending those traits for other types like
std::reference_wrapper<T>.std::shared_ptr<T>andstd::weak_ptr<T>are special case. We should embed smart pointers. And since that changes behavior consider adding appropriate template parameter to control reference strategy (not only weak, but strong also).