mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-08-20 22:28:17 +00:00
Added thirdparty: boost library
This commit is contained in:
+73
@@ -0,0 +1,73 @@
|
||||
/*!
|
||||
@file
|
||||
Forward declares `boost::hana::IntegralConstant`.
|
||||
|
||||
Copyright Louis Dionne 2013-2022
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
*/
|
||||
|
||||
#ifndef BOOST_HANA_FWD_CONCEPT_INTEGRAL_CONSTANT_HPP
|
||||
#define BOOST_HANA_FWD_CONCEPT_INTEGRAL_CONSTANT_HPP
|
||||
|
||||
#include <boost/hana/config.hpp>
|
||||
|
||||
|
||||
namespace boost { namespace hana {
|
||||
//! @ingroup group-concepts
|
||||
//! The `IntegralConstant` concept represents compile-time integral values.
|
||||
//!
|
||||
//! The `IntegralConstant` concept represents objects that hold a
|
||||
//! `constexpr` value of an integral type. In other words, it describes
|
||||
//! the essential functionality provided by `std::integral_constant`.
|
||||
//! An `IntegralConstant` is also just a special kind of `Constant`
|
||||
//! whose inner value is of an integral type.
|
||||
//!
|
||||
//!
|
||||
//! Minimal complete definition
|
||||
//! ---------------------------
|
||||
//! The requirements for being an `IntegralConstant` are quite simple.
|
||||
//! First, an `IntegralConstant` `C` must be a `Constant` such that
|
||||
//! `Tag::value_type` is an integral type, where `Tag` is the tag of `C`.
|
||||
//!
|
||||
//! Secondly, `C` must have a nested `static constexpr` member named
|
||||
//! `value`, such that the following code is valid:
|
||||
//! @code
|
||||
//! constexpr auto v = C::value;
|
||||
//! @endcode
|
||||
//! Because of the requirement that `Tag::value_type` be an integral type,
|
||||
//! it follows that `C::value` must be an integral value.
|
||||
//!
|
||||
//! Finally, it is necessary to specialize the `IntegralConstant` template
|
||||
//! in the `boost::hana` namespace to tell Hana that a type is a model
|
||||
//! of `IntegralConstant`:
|
||||
//! @code
|
||||
//! namespace boost { namespace hana {
|
||||
//! template <>
|
||||
//! struct IntegralConstant<your_custom_tag> {
|
||||
//! static constexpr bool value = true;
|
||||
//! };
|
||||
//! }}
|
||||
//! @endcode
|
||||
//!
|
||||
//!
|
||||
//! Refined concept
|
||||
//! ---------------
|
||||
//! 1. `Constant` (free implementation of `value`)\n
|
||||
//! The `value` function required to be a `Constant` can be implemented
|
||||
//! as follows for `IntegralConstant`s:
|
||||
//! @code
|
||||
//! value<C>() == C::value
|
||||
//! @endcode
|
||||
//! The `to` function must still be provided explicitly for the model
|
||||
//! of `Constant` to be complete.
|
||||
//!
|
||||
//!
|
||||
//! Concrete models
|
||||
//! ---------------
|
||||
//! `hana::integral_constant`
|
||||
template <typename C>
|
||||
struct IntegralConstant;
|
||||
}} // end namespace boost::hana
|
||||
|
||||
#endif // !BOOST_HANA_FWD_CONCEPT_INTEGRAL_CONSTANT_HPP
|
||||
Reference in New Issue
Block a user