]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/type_erasure/include/boost/type_erasure/concept_interface.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / type_erasure / include / boost / type_erasure / concept_interface.hpp
1 // Boost.TypeErasure library
2 //
3 // Copyright 2011 Steven Watanabe
4 //
5 // Distributed under the Boost Software License Version 1.0. (See
6 // accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8 //
9 // $Id$
10
11 #ifndef BOOST_TYPE_ERASURE_CONCEPT_INTERFACE_HPP_INCLUDED
12 #define BOOST_TYPE_ERASURE_CONCEPT_INTERFACE_HPP_INCLUDED
13
14 namespace boost {
15 namespace type_erasure {
16
17 /**
18 * The @ref concept_interface class can be specialized to
19 * add behavior to an @ref any. An @ref any inherits from
20 * all the relevant specializations of @ref concept_interface.
21 *
22 * @ref concept_interface can be specialized for either
23 * primitive or composite concepts. If a concept @c C1
24 * contains another concept @c C2, then the library guarantees
25 * that the specialization of @ref concept_interface for
26 * @c C2 is a base class of the specialization for @c C1.
27 * This means that @c C1 can safely override members of @c C2.
28 *
29 * @ref concept_interface may only be specialized for user-defined
30 * concepts. The library owns the specializations of its own
31 * built in concepts.
32 *
33 * \tparam Concept The concept that we're specializing
34 * @ref concept_interface for. One of its
35 * placeholders should be @c ID.
36 * \tparam Base The base of this class. Specializations of @ref
37 * concept_interface must inherit publicly from this type.
38 * \tparam ID The placeholder representing this type.
39 * \tparam Enable A dummy parameter that can be used for SFINAE.
40 *
41 * The metafunctions @ref derived, @ref rebind_any, and @ref as_param
42 * (which can be applied to @c Base) are useful for determining the
43 * argument and return types of functions defined in @ref concept_interface.
44 *
45 * For dispatching the function use \call.
46 */
47 template<class Concept, class Base, class ID, class Enable = void>
48 struct concept_interface : Base {};
49
50 }
51 }
52
53 #endif