PMDK C++ bindings
1.7
This is the C++ bindings documentation for PMDK's libpmemobj.
libpmemobj++
detail
template_helpers.hpp
Go to the documentation of this file.
1
/*
2
* Copyright 2019, Intel Corporation
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
6
* are met:
7
*
8
* * Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
*
11
* * Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in
13
* the documentation and/or other materials provided with the
14
* distribution.
15
*
16
* * Neither the name of the copyright holder nor the names of its
17
* contributors may be used to endorse or promote products derived
18
* from this software without specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*/
32
38
#ifndef LIBPMEMOBJ_CPP_TEMPLATE_HELPERS_HPP
39
#define LIBPMEMOBJ_CPP_TEMPLATE_HELPERS_HPP
40
41
#include <type_traits>
42
43
namespace
pmem
44
{
45
46
namespace
detail
47
{
48
49
template
<
typename
... Ts>
50
struct
make_void {
51
typedef
void
type;
52
};
53
template
<
typename
... Ts>
54
using
void_t =
typename
make_void<Ts...>::type;
55
56
/* Generic SFINAE helper for expression checks, based on the idea demonstrated
57
* in ISO C++ paper n4502 */
58
template
<
typename
T,
typename
,
template
<
typename
>
class
... Checks>
59
struct
supports_impl {
60
using
type = std::false_type;
61
};
62
template
<
typename
T,
template
<
typename
>
class
... Checks>
63
struct
supports_impl<T, void_t<Checks<T>...>, Checks...> {
64
using
type = std::true_type;
65
};
66
67
template
<
typename
T,
template
<
typename
>
class
... Checks>
68
using
supports =
typename
supports_impl<T, void, Checks...>::type;
69
70
}
/* namespace detail */
71
72
}
/* namespace pmem */
73
74
#endif
/* LIBPMEMOBJ_CPP_TEMPLATE_HELPERS_HPP */
Generated by
1.8.20