|
- /*!
- * \file integral.h
- * \brief Template meta-programming integral constant
- *
- * Copyright (C) 2018 Christos Choutouridis
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- #ifndef __utl_meta_integral_h__
- #define __utl_meta_integral_h__
-
- #include <utl/impl/impl.h>
-
- /*!
- * \ingroup meta
- * \defgroup integral
- * integral constand support header
- */
- //! @{
-
- namespace utl {
-
- //! integral_constant
- template <typename _Tp, _Tp _v>
- struct integral_ {
- using value_type = _Tp;
- using type = integral_<_Tp, _v>;
-
- constexpr operator value_type() const {
- return value;
- }
- constexpr value_type operator()() const {
- return value;
- }
- static constexpr _Tp value = _v;
- };
-
- template<typename _Tp, _Tp _v>
- constexpr _Tp integral_<_Tp, _v>::value;
- }
- //!@}
-
- #endif /* __utl_meta_integral_h__ */
|