diff options
Diffstat (limited to 'boost/hana/fwd/or.hpp')
-rw-r--r-- | boost/hana/fwd/or.hpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/boost/hana/fwd/or.hpp b/boost/hana/fwd/or.hpp new file mode 100644 index 0000000000..1d2ad1a348 --- /dev/null +++ b/boost/hana/fwd/or.hpp @@ -0,0 +1,53 @@ +/*! +@file +Forward declares `boost::hana::or_`. + +@copyright Louis Dionne 2013-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_FWD_OR_HPP +#define BOOST_HANA_FWD_OR_HPP + +#include <boost/hana/config.hpp> +#include <boost/hana/core/when.hpp> + + +BOOST_HANA_NAMESPACE_BEGIN + //! Return whether any of the arguments is true-valued. + //! @ingroup group-Logical + //! + //! `or_` can be called with one argument or more. When called with + //! two arguments, `or_` uses tag-dispatching to find the right + //! implementation. Otherwise, + //! @code + //! or_(x) == x + //! or_(x, y, ...z) == or_(or_(x, y), z...) + //! @endcode + //! + //! + //! Example + //! ------- + //! @include example/or.cpp +#ifdef BOOST_HANA_DOXYGEN_INVOKED + constexpr auto or_ = [](auto&& x, auto&& ...y) -> decltype(auto) { + return tag-dispatched; + }; +#else + template <typename L, typename = void> + struct or_impl : or_impl<L, when<true>> { }; + + struct or_t { + template <typename X, typename Y> + constexpr decltype(auto) operator()(X&& x, Y&& y) const; + + template <typename X, typename ...Y> + constexpr decltype(auto) operator()(X&& x, Y&& ...y) const; + }; + + constexpr or_t or_{}; +#endif +BOOST_HANA_NAMESPACE_END + +#endif // !BOOST_HANA_FWD_OR_HPP |