"src/vscode:/vscode.git/clone" did not exist on "7767420cce95cb6dde5ced868670df5a5905d7a9"
requires.hpp 1.57 KB
Newer Older
Paul's avatar
Paul committed
1
2
#ifndef MIGRAPH_GUARD_MIGRAPHLIB_REQUIRES_HPP
#define MIGRAPH_GUARD_MIGRAPHLIB_REQUIRES_HPP
Paul's avatar
Paul committed
3
4
5

#include <type_traits>

Paul's avatar
Paul committed
6
namespace migraph {
Paul's avatar
Paul committed
7

Paul's avatar
Paul committed
8
template <bool... Bs>
Paul's avatar
Paul committed
9
struct and_ : std::is_same<and_<Bs...>, and_<(Bs || true)...>> // NOLINT
Paul's avatar
Paul committed
10
11
{
};
Paul's avatar
Paul committed
12

Paul's avatar
Paul committed
13
template <bool B>
Paul's avatar
Paul committed
14
15
using bool_c = std::integral_constant<bool, B>;

Paul's avatar
Paul committed
16
template <int N>
17
18
19
20
21
22
23
24
struct requires_enum
{
    enum e
    {
        A = 0
    };
};

Paul's avatar
Paul committed
25
#define MIGRAPH_REQUIRES_CAT(x, y) x##y
26

Paul's avatar
Paul committed
27
#ifdef CPPCHECK
Paul's avatar
Paul committed
28
#define MIGRAPH_REQUIRES(...) class = void
Paul's avatar
Paul committed
29
#else
30
31
#if 0
// TODO: This current crashed on clang
Paul's avatar
Paul committed
32
33
34
35
36
37
38
#define MIGRAPH_REQUIRES(...)                                                                       \
    typename migraph::requires_enum<__LINE__>::e MIGRAPH_REQUIRES_CAT(                              \
        PrivateRequires,                                                                            \
        __LINE__) = migraph::requires_enum<__LINE__>::A,                                            \
        class     = typename std::enable_if<and_<__VA_ARGS__,                                       \
                                             MIGRAPH_REQUIRES_CAT(PrivateRequires, __LINE__) == \
                                                 migraph::requires_enum<__LINE__>::A>{}>::type
39
#else
Paul's avatar
Paul committed
40
41
42
43
#define MIGRAPH_REQUIRES(...)                                             \
    typename migraph::requires_enum<__LINE__>::e MIGRAPH_REQUIRES_CAT(    \
        PrivateRequires, __LINE__) = migraph::requires_enum<__LINE__>::A, \
                         class     = typename std::enable_if<and_<__VA_ARGS__>{}>::type
44
#endif
Paul's avatar
Paul committed
45
#endif
Paul's avatar
Paul committed
46

Paul's avatar
Paul committed
47
} // namespace migraph
Paul's avatar
Paul committed
48
49

#endif