]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/hana/include/boost/hana/detail/dispatch_if.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / hana / include / boost / hana / detail / dispatch_if.hpp
CommitLineData
7c673cae
FG
1/*!
2@file
3Defines `BOOST_HANA_DISPATCH_IF`.
4
5@copyright Louis Dionne 2013-2016
6Distributed under the Boost Software License, Version 1.0.
7(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
8 */
9
10#ifndef BOOST_HANA_DETAIL_DISPATCH_IF_HPP
11#define BOOST_HANA_DETAIL_DISPATCH_IF_HPP
12
13#include <boost/hana/config.hpp>
14
15#include <type_traits>
16
17
18BOOST_HANA_NAMESPACE_BEGIN
19 struct deleted_implementation {
20 template <typename ...T>
21 static constexpr auto apply(T&& ...) = delete;
22 };
23
24 //! @ingroup group-details
25 //! Dispatch to the given implementation method only when a condition is
26 //! satisfied.
27 //!
28 //! If the condition is satisfied, this macro is equivalent to the type
29 //! `IMPL`. Otherwise, it is equivalent to a type with a deleted static
30 //! function named `apply`. When a tag-dispatching error happens, the
31 //! condition should be false and the deleted static function `apply`
32 //! will prevent the compiler from generating too much garbage.
33 //!
34 //! @note
35 //! When `BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS` is defined, the
36 //! condition is always ignored and this macro expands to the
37 //! implementation only.
38 //!
39 //! @remark
40 //! This must be implemented as a macro, because we don't want the
41 //! condition to be evaluated at all when
42 //! `BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS` is defined.
43#ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
44 #define BOOST_HANA_DISPATCH_IF(IMPL, ...) \
45 ::std::conditional_t< \
46 (__VA_ARGS__), \
47 IMPL, \
48 ::boost::hana::deleted_implementation \
49 > \
50 /**/
51#else
52 #define BOOST_HANA_DISPATCH_IF(IMPL, ...) IMPL
53#endif
54BOOST_HANA_NAMESPACE_END
55
56#endif // !BOOST_HANA_DETAIL_DISPATCH_IF_HPP