aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/variant-wrapper.hh
blob: a809cd2a4851f6c76b65c1c0a9469bd983fa210d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#pragma once
///@file

// not used, but will be used by callers
#include <variant>

/**
 * Force the default versions of all constructors (copy, move, copy
 * assignment).
 */
// NOLINTBEGIN(bugprone-macro-parentheses)
#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;
// NOLINTEND(bugprone-macro-parentheses)

/**
 * 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)...) \
    { }