1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #ifndef BOOST_HANA_EMPTY_HPP
- #define BOOST_HANA_EMPTY_HPP
- #include <boost/hana/fwd/empty.hpp>
- #include <boost/hana/concept/monad_plus.hpp>
- #include <boost/hana/concept/sequence.hpp>
- #include <boost/hana/config.hpp>
- #include <boost/hana/core/dispatch.hpp>
- #include <boost/hana/core/make.hpp>
- namespace boost { namespace hana {
-
- template <typename M>
- constexpr auto empty_t<M>::operator()() const {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::empty<M>() requires 'M' to be a MonadPlus");
- #endif
- using Empty = BOOST_HANA_DISPATCH_IF(empty_impl<M>,
- hana::MonadPlus<M>::value
- );
- return Empty::apply();
- }
-
- template <typename M, bool condition>
- struct empty_impl<M, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- template <typename S>
- struct empty_impl<S, when<Sequence<S>::value>> {
- static constexpr auto apply() {
- return hana::make<S>();
- }
- };
- }}
- #endif
|