osh.h

My personal stdc++ replacement
git clone git://git.oshgnacknak.de/osh.h.git
Log | Files | Refs

commit 9a7ddd7cdb6386ae07b7ebc2316de106a93b42c5
parent 0b448340e8390de6132c11d27e7d6397d0997d23
Author: Oshgnacknak <osh@oshgnacknak.de>
Date:   Mon,  3 Jan 2022 14:28:32 +0100

Add AutoDestruct mechanism

Diffstat:
Mosh.h | 28++++++++++++++++++++++++++++
1 file changed, 28 insertions(+), 0 deletions(-)

diff --git a/osh.h b/osh.h @@ -70,6 +70,21 @@ namespace osh { void assert(bool condition, Args&&... args); template<typename T> + concept Destructible = requires(T t) { + t.destruct(); + }; + + template<Destructible T> + struct AutoDestruct : public T { + template<typename... Args> + AutoDestruct(Args&&... args); + + ~AutoDestruct(); + }; + + template<Destructible T> + AutoDestruct<T> autoDestruct(T t); + template<typename T> void swap(T& a, T& b); } @@ -210,6 +225,19 @@ namespace osh { } template<typename T> + template<typename... Args> + AutoDestruct<T>::AutoDestruct(Args&&... args) : T(args...) {} + + template<Destructible T> + AutoDestruct<T>::~AutoDestruct() { + this->destruct(); + } + + template<Destructible T> + AutoDestruct<T> autoDestruct(T t) { + return (AutoDestruct<T>) t; + } + template<typename T> void swap(T& a, T& b) { T t = a; a = b;