diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2023-08-18 13:47:01 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-18 13:47:01 -0400 |
commit | 665ad4f7c506d3274db564d6c3c20526dca218e0 (patch) | |
tree | 403f6f67255aba113fd03ca7d29d41a05dd64e92 /src/libutil/variant-wrapper.hh | |
parent | 735558bea6f89af39609da01177a20685cdd2718 (diff) | |
parent | 9121fed4b4d02c286166373fe9805773afb13694 (diff) |
Merge pull request #8839 from obsidiansystems/string-context-7479
Refactor Raw pattern, part of #7479
Diffstat (limited to 'src/libutil/variant-wrapper.hh')
-rw-r--r-- | src/libutil/variant-wrapper.hh | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/libutil/variant-wrapper.hh b/src/libutil/variant-wrapper.hh new file mode 100644 index 000000000..cedcb999c --- /dev/null +++ b/src/libutil/variant-wrapper.hh @@ -0,0 +1,30 @@ +#pragma once +///@file + +// not used, but will be used by callers +#include <variant> + +/** + * Force the default versions of all constructors (copy, move, copy + * assignment). + */ +#define FORCE_DEFAULT_CONSTRUCTORS(CLASS_NAME) \ + CLASS_NAME(const CLASS_NAME &) = default; \ + CLASS_NAME(CLASS_NAME &) = default; \ + CLASS_NAME(CLASS_NAME &&) = default; \ + \ + CLASS_NAME & operator =(const CLASS_NAME &) = default; \ + CLASS_NAME & operator =(CLASS_NAME &) = default; + +/** + * Make a wrapper constructor. All args are forwarded to the + * construction of the "raw" field. (Which we assume is the only one.) + * + * The moral equivalent of `using Raw::Raw;` + */ +#define MAKE_WRAPPER_CONSTRUCTOR(CLASS_NAME) \ + FORCE_DEFAULT_CONSTRUCTORS(CLASS_NAME) \ + \ + CLASS_NAME(auto &&... arg) \ + : raw(std::forward<decltype(arg)>(arg)...) \ + { } |