2
0
mirror of https://github.com/boostorg/hana.git synced 2026-02-18 02:02:09 +00:00
Files
hana/test/misc/fusion_any.cpp
2014-05-20 17:23:04 -04:00

62 lines
1.4 KiB
C++

/*
* Copyright Louis Dionne 2014
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE.md or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*/
#include <boost/hana/detail/static_assert.hpp>
#include <boost/hana/integral.hpp>
#include <boost/hana/list.hpp>
#include <cassert>
#include <type_traits>
using namespace boost::hana;
namespace purely_runtime_predicate {
struct odd {
template <typename T>
bool operator()(T t) const { return t % 2; }
};
void test() {
assert(any(odd{}, list(1, 2)));
assert(!any(odd{}, list(2, 4)));
}
}
namespace constexpr_predicate {
struct odd {
template <typename T>
constexpr bool operator()(T t) const { return t % 2; }
};
void test() {
BOOST_HANA_STATIC_ASSERT(any(odd{}, list(1, 2)));
BOOST_HANA_STATIC_ASSERT(!any(odd{}, list(2, 4)));
}
}
namespace type_only_predicate {
struct odd {
template <typename T>
constexpr auto operator()(T t) const { return t % int_<2>; }
};
static_assert(std::is_same<
decltype(any(odd{}, list(int_<1>, int_<2>))),
Bool<true>
>::value, "");
static_assert(std::is_same<
decltype(any(odd{}, list(int_<2>, int_<4>))),
Bool<false>
>::value, "");
}
int main() {
purely_runtime_predicate::test();
constexpr_predicate::test();
}