2
0
mirror of https://github.com/boostorg/hana.git synced 2026-02-08 23:02:10 +00:00
Files
hana/example/maybe/maybe.cpp
2014-08-30 17:18:26 -04:00

83 lines
2.2 KiB
C++

/*
@copyright Louis Dionne 2014
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
*/
#include <boost/hana/detail/assert.hpp>
#include <boost/hana/detail/constexpr.hpp>
#include <boost/hana/foreign.hpp>
#include <boost/hana/integral.hpp>
#include <boost/hana/maybe.hpp>
using namespace boost::hana;
int main() {
{
//! [maybe]
BOOST_HANA_CONSTEXPR_LAMBDA auto inc = [](auto x) { return x + 1; };
BOOST_HANA_CONSTEXPR_ASSERT(maybe('x', inc, just(1)) == 2);
BOOST_HANA_CONSTEXPR_ASSERT(maybe('x', inc, nothing) == 'x');
//! [maybe]
}
{
//! [is_just]
BOOST_HANA_CONSTANT_ASSERT( is_just(just('x')));
BOOST_HANA_CONSTANT_ASSERT( is_just(just(nothing)));
BOOST_HANA_CONSTANT_ASSERT(!is_just(nothing));
//! [is_just]
}
{
//! [is_nothing]
BOOST_HANA_CONSTANT_ASSERT( is_nothing(nothing));
BOOST_HANA_CONSTANT_ASSERT(!is_nothing(just('x')));
BOOST_HANA_CONSTANT_ASSERT(!is_nothing(just(nothing)));
//! [is_nothing]
}
{
//! [from_maybe]
BOOST_HANA_CONSTEXPR_ASSERT(from_maybe('x', just(1)) == 1);
BOOST_HANA_CONSTEXPR_ASSERT(from_maybe('x', nothing) == 'x');
//! [from_maybe]
}
{
//! [only_when]
BOOST_HANA_CONSTEXPR_LAMBDA auto even = [](auto x) {
return x % int_<2> == int_<0>;
};
BOOST_HANA_CONSTEXPR_LAMBDA auto half = [](auto x) {
return x / int_<2>;
};
BOOST_HANA_CONSTANT_ASSERT(only_when(even, half, int_<4>) == just(int_<2>));
BOOST_HANA_CONSTANT_ASSERT(only_when(even, half, int_<3>) == nothing);
//! [only_when]
}
{
//! [from_just]
BOOST_HANA_CONSTEXPR_ASSERT(from_just(just('x')) == 'x');
// from_just(nothing); // compile-time static assertion
// ! [from_just]
}
{
//! [nothing]
constexpr auto x = nothing;
//! [nothing]
(void)x;
}
{
//! [just]
BOOST_HANA_CONSTEXPR_LAMBDA auto just_x = just('x');
//! [just]
(void)just_x;
}
}