ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
type_traits.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2010-2022 The ESPResSo project
3 *
4 * This file is part of ESPResSo.
5 *
6 * ESPResSo is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * ESPResSo is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19#ifndef UTILS_TYPE_TRAITS_HPP
20#define UTILS_TYPE_TRAITS_HPP
21
22#include <climits>
23#include <cstddef>
24#include <type_traits>
25
26namespace Utils {
27
28/**
29 * @brief Remove const from a function signature.
30 */
31template <typename T> struct function_remove_const;
32
33template <typename R, typename... Args>
34struct function_remove_const<R(Args...)> {
35 using type = R(Args...);
36};
37
38template <typename R, typename... Args>
39struct function_remove_const<R(Args...) const> {
40 using type = R(Args...);
41};
42
43template <class...> struct conjunction : std::true_type {};
44template <class B1> struct conjunction<B1> : B1 {};
45template <class B1, class... Bn>
46struct conjunction<B1, Bn...>
47 : std::conditional<bool(B1::value), conjunction<Bn...>, B1>::type {};
48
49/**
50 * @brief Size of a type in bits.
51 *
52 * On posix platforms this is 8 * sizeof(T).
53 */
54template <class T>
56 : std::integral_constant<std::size_t, CHAR_BIT * sizeof(T)> {};
57} // namespace Utils
58
59#endif
Remove const from a function signature.
Size of a type in bits.