requires.hpp 595 Bytes
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
#ifdef CPPCHECK
Paul's avatar
Paul committed
17
#define MIGRAPH_REQUIRES(...) class = void
Paul's avatar
Paul committed
18
#else
Paul's avatar
Paul committed
19
#define MIGRAPH_REQUIRES(...)              \
Paul's avatar
Paul committed
20
21
    bool PrivateRequires##__LINE__ = true, \
         class = typename std::enable_if<and_<__VA_ARGS__, PrivateRequires##__LINE__>{}>::type
Paul's avatar
Paul committed
22
#endif
Paul's avatar
Paul committed
23

Paul's avatar
Paul committed
24
} // namespace migraph
Paul's avatar
Paul committed
25
26

#endif