stabilize build system: depends, installer, boost/bdb fixes, cross targets groundwork

This commit is contained in:
2026-02-24 18:38:47 +00:00
parent da8c28aaeb
commit 65cb2619a7
13106 changed files with 2484322 additions and 1804 deletions
@@ -0,0 +1,33 @@
/*!
@file
Defines `boost::hana::Applicative`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_APPLICATIVE_HPP
#define BOOST_HANA_CONCEPT_APPLICATIVE_HPP
#include <boost/hana/fwd/concept/applicative.hpp>
#include <boost/hana/ap.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/lift.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename A>
struct Applicative
: hana::integral_constant<bool,
!is_default<ap_impl<typename tag_of<A>::type>>::value &&
!is_default<lift_impl<typename tag_of<A>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_APPLICATIVE_HPP
@@ -0,0 +1,35 @@
/*!
@file
Defines `boost::hana::Comonad`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_COMONAD_HPP
#define BOOST_HANA_CONCEPT_COMONAD_HPP
#include <boost/hana/fwd/concept/comonad.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/duplicate.hpp>
#include <boost/hana/extend.hpp>
#include <boost/hana/extract.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename W>
struct Comonad
: hana::integral_constant<bool,
!is_default<extract_impl<typename tag_of<W>::type>>::value &&
(!is_default<duplicate_impl<typename tag_of<W>::type>>::value ||
!is_default<extend_impl<typename tag_of<W>::type>>::value)
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_COMONAD_HPP
@@ -0,0 +1,32 @@
/*!
@file
Defines `boost::hana::Comparable`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_COMPARABLE_HPP
#define BOOST_HANA_CONCEPT_COMPARABLE_HPP
#include <boost/hana/fwd/concept/comparable.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/equal.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename T>
struct Comparable
: hana::integral_constant<bool,
!is_default<equal_impl<typename tag_of<T>::type,
typename tag_of<T>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_COMPARABLE_HPP
@@ -0,0 +1,31 @@
/*!
@file
Defines `boost::hana::Constant`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_CONSTANT_HPP
#define BOOST_HANA_CONCEPT_CONSTANT_HPP
#include <boost/hana/fwd/concept/constant.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/value.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename C>
struct Constant
: hana::integral_constant<bool,
!is_default<value_impl<typename tag_of<C>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_CONSTANT_HPP
@@ -0,0 +1,35 @@
/*!
@file
Defines `boost::hana::EuclideanRing`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_EUCLIDEAN_RING_HPP
#define BOOST_HANA_CONCEPT_EUCLIDEAN_RING_HPP
#include <boost/hana/fwd/concept/euclidean_ring.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/div.hpp>
#include <boost/hana/mod.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename R>
struct EuclideanRing
: hana::integral_constant<bool,
!is_default<mod_impl<typename tag_of<R>::type,
typename tag_of<R>::type>>::value &&
!is_default<div_impl<typename tag_of<R>::type,
typename tag_of<R>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_EUCLIDEAN_RING_HPP
@@ -0,0 +1,33 @@
/*!
@file
Defines `boost::hana::Foldable`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_FOLDABLE_HPP
#define BOOST_HANA_CONCEPT_FOLDABLE_HPP
#include <boost/hana/fwd/concept/foldable.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/fold_left.hpp>
#include <boost/hana/unpack.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename T>
struct Foldable
: hana::integral_constant<bool,
!is_default<fold_left_impl<typename tag_of<T>::type>>::value ||
!is_default<unpack_impl<typename tag_of<T>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_FOLDABLE_HPP
@@ -0,0 +1,33 @@
/*!
@file
Defines `boost::hana::Functor`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_FUNCTOR_HPP
#define BOOST_HANA_CONCEPT_FUNCTOR_HPP
#include <boost/hana/fwd/concept/functor.hpp>
#include <boost/hana/adjust_if.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/transform.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename F>
struct Functor
: hana::integral_constant<bool,
!is_default<transform_impl<typename tag_of<F>::type>>::value ||
!is_default<adjust_if_impl<typename tag_of<F>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_FUNCTOR_HPP
@@ -0,0 +1,34 @@
/*!
@file
Defines `boost::hana::Group`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_GROUP_HPP
#define BOOST_HANA_CONCEPT_GROUP_HPP
#include <boost/hana/fwd/concept/group.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/minus.hpp>
#include <boost/hana/negate.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename G>
struct Group
: hana::integral_constant<bool,
!is_default<negate_impl<typename tag_of<G>::type>>::value ||
!is_default<minus_impl<typename tag_of<G>::type,
typename tag_of<G>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_GROUP_HPP
@@ -0,0 +1,32 @@
/*!
@file
Defines `boost::hana::Hashable`.
@copyright Louis Dionne 2016
@copyright Jason Rice 2016
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_CONCEPT_HASHABLE_HPP
#define BOOST_HANA_CONCEPT_HASHABLE_HPP
#include <boost/hana/fwd/concept/hashable.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/hash.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename T>
struct Hashable
: hana::integral_constant<bool,
!is_default<hash_impl<typename tag_of<T>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_HASHABLE_HPP
@@ -0,0 +1,43 @@
/*!
@file
Defines `boost::hana::IntegralConstant`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_INTEGRAL_CONSTANT_HPP
#define BOOST_HANA_CONCEPT_INTEGRAL_CONSTANT_HPP
#include <boost/hana/fwd/concept/integral_constant.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
BOOST_HANA_NAMESPACE_BEGIN
namespace detail {
template <typename C, typename Tag = typename tag_of<C>::type>
struct integral_constant_dispatch
: hana::integral_constant<bool,
hana::IntegralConstant<Tag>::value
>
{ };
template <typename C>
struct integral_constant_dispatch<C, C>
: hana::integral_constant<bool, false>
{ };
}
//! @cond
template <typename C>
struct IntegralConstant
: detail::integral_constant_dispatch<C>
{ };
//! @endcond
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_INTEGRAL_CONSTANT_HPP
@@ -0,0 +1,35 @@
/*!
@file
Defines `boost::hana::Iterable`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_ITERABLE_HPP
#define BOOST_HANA_CONCEPT_ITERABLE_HPP
#include <boost/hana/fwd/concept/iterable.hpp>
#include <boost/hana/at.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/drop_front.hpp>
#include <boost/hana/is_empty.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename It>
struct Iterable
: hana::integral_constant<bool,
!is_default<at_impl<typename tag_of<It>::type>>::value &&
!is_default<drop_front_impl<typename tag_of<It>::type>>::value &&
!is_default<is_empty_impl<typename tag_of<It>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_ITERABLE_HPP
@@ -0,0 +1,35 @@
/*!
@file
Defines `boost::hana::Logical`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_LOGICAL_HPP
#define BOOST_HANA_CONCEPT_LOGICAL_HPP
#include <boost/hana/fwd/concept/logical.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/eval_if.hpp>
#include <boost/hana/not.hpp>
#include <boost/hana/while.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename L>
struct Logical
: hana::integral_constant<bool,
!is_default<eval_if_impl<typename tag_of<L>::type>>::value &&
!is_default<not_impl<typename tag_of<L>::type>>::value &&
!is_default<while_impl<typename tag_of<L>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_LOGICAL_HPP
@@ -0,0 +1,41 @@
/*!
@file
Defines `boost::hana::Metafunction`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_METAFUNCTION_HPP
#define BOOST_HANA_CONCEPT_METAFUNCTION_HPP
#include <boost/hana/fwd/concept/metafunction.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
BOOST_HANA_NAMESPACE_BEGIN
namespace detail {
template <typename F, typename Tag = typename tag_of<F>::type>
struct metafunction_dispatch
: hana::integral_constant<bool,
Metafunction<Tag>::value
>
{ };
template <typename F>
struct metafunction_dispatch<F, F>
: hana::integral_constant<bool, false>
{ };
}
template <typename F>
struct Metafunction
: detail::metafunction_dispatch<F>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_METAFUNCTION_HPP
@@ -0,0 +1,33 @@
/*!
@file
Defines `boost::hana::Monad`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_MONAD_HPP
#define BOOST_HANA_CONCEPT_MONAD_HPP
#include <boost/hana/fwd/concept/monad.hpp>
#include <boost/hana/chain.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/flatten.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename M>
struct Monad
: hana::integral_constant<bool,
!is_default<flatten_impl<typename tag_of<M>::type>>::value ||
!is_default<chain_impl<typename tag_of<M>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_MONAD_HPP
@@ -0,0 +1,33 @@
/*!
@file
Defines `boost::hana::MonadPlus`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_MONAD_PLUS_HPP
#define BOOST_HANA_CONCEPT_MONAD_PLUS_HPP
#include <boost/hana/fwd/concept/monad_plus.hpp>
#include <boost/hana/concat.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/empty.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename M>
struct MonadPlus
: hana::integral_constant<bool,
!is_default<concat_impl<typename tag_of<M>::type>>::value &&
!is_default<empty_impl<typename tag_of<M>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_MONAD_PLUS_HPP
@@ -0,0 +1,34 @@
/*!
@file
Defines `boost::hana::Monoid`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_MONOID_HPP
#define BOOST_HANA_CONCEPT_MONOID_HPP
#include <boost/hana/fwd/concept/monoid.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/plus.hpp>
#include <boost/hana/zero.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename M>
struct Monoid
: hana::integral_constant<bool,
!is_default<zero_impl<typename tag_of<M>::type>>::value &&
!is_default<plus_impl<typename tag_of<M>::type,
typename tag_of<M>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_MONOID_HPP
@@ -0,0 +1,32 @@
/*!
@file
Defines `boost::hana::Orderable`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_ORDERABLE_HPP
#define BOOST_HANA_CONCEPT_ORDERABLE_HPP
#include <boost/hana/fwd/concept/orderable.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/less.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename Ord>
struct Orderable
: hana::integral_constant<bool,
!is_default<less_impl<typename tag_of<Ord>::type,
typename tag_of<Ord>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_ORDERABLE_HPP
@@ -0,0 +1,33 @@
/*!
@file
Defines `boost::hana::Product`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_PRODUCT_HPP
#define BOOST_HANA_CONCEPT_PRODUCT_HPP
#include <boost/hana/fwd/concept/product.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/first.hpp>
#include <boost/hana/second.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename P>
struct Product
: hana::integral_constant<bool,
!is_default<first_impl<typename tag_of<P>::type>>::value &&
!is_default<second_impl<typename tag_of<P>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_PRODUCT_HPP
@@ -0,0 +1,34 @@
/*!
@file
Defines `boost::hana::Ring`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_RING_HPP
#define BOOST_HANA_CONCEPT_RING_HPP
#include <boost/hana/fwd/concept/ring.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/mult.hpp>
#include <boost/hana/one.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename R>
struct Ring
: hana::integral_constant<bool,
!is_default<one_impl<typename tag_of<R>::type>>::value &&
!is_default<mult_impl<typename tag_of<R>::type,
typename tag_of<R>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_RING_HPP
@@ -0,0 +1,33 @@
/*!
@file
Defines `boost::hana::Searchable`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_SEARCHABLE_HPP
#define BOOST_HANA_CONCEPT_SEARCHABLE_HPP
#include <boost/hana/fwd/concept/searchable.hpp>
#include <boost/hana/any_of.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
#include <boost/hana/find_if.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename S>
struct Searchable
: hana::integral_constant<bool,
!is_default<any_of_impl<typename tag_of<S>::type>>::value &&
!is_default<find_if_impl<typename tag_of<S>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_SEARCHABLE_HPP
@@ -0,0 +1,44 @@
/*!
@file
Defines `boost::hana::Sequence`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_SEQUENCE_HPP
#define BOOST_HANA_CONCEPT_SEQUENCE_HPP
#include <boost/hana/fwd/concept/sequence.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/core/when.hpp>
#include <boost/hana/detail/integral_constant.hpp>
BOOST_HANA_NAMESPACE_BEGIN
namespace detail {
template <typename S, typename Tag = typename hana::tag_of<S>::type>
struct sequence_dispatch
: hana::integral_constant<bool,
hana::Sequence<Tag>::value
>
{ };
template <typename S>
struct sequence_dispatch<S, S>
: hana::integral_constant<bool, false>
{ };
}
//! @cond
template <typename S, bool condition>
struct Sequence<S, when<condition>>
: detail::sequence_dispatch<S>
{ };
//! @endcond
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_SEQUENCE_HPP
@@ -0,0 +1,31 @@
/*!
@file
Defines `boost::hana::Struct`.
@copyright Louis Dionne 2013-2017
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_CONCEPT_STRUCT_HPP
#define BOOST_HANA_CONCEPT_STRUCT_HPP
#include <boost/hana/fwd/concept/struct.hpp>
#include <boost/hana/accessors.hpp>
#include <boost/hana/config.hpp>
#include <boost/hana/core/default.hpp>
#include <boost/hana/core/tag_of.hpp>
#include <boost/hana/detail/integral_constant.hpp>
BOOST_HANA_NAMESPACE_BEGIN
template <typename S>
struct Struct
: hana::integral_constant<bool,
!is_default<accessors_impl<typename tag_of<S>::type>>::value
>
{ };
BOOST_HANA_NAMESPACE_END
#endif // !BOOST_HANA_CONCEPT_STRUCT_HPP