aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/variant-wrapper.hh
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2023-08-18 13:47:01 -0400
committerGitHub <noreply@github.com>2023-08-18 13:47:01 -0400
commit665ad4f7c506d3274db564d6c3c20526dca218e0 (patch)
tree403f6f67255aba113fd03ca7d29d41a05dd64e92 /src/libutil/variant-wrapper.hh
parent735558bea6f89af39609da01177a20685cdd2718 (diff)
parent9121fed4b4d02c286166373fe9805773afb13694 (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.hh30
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)...) \
+ { }