template <class L, class R>
struct either_tag;
template <class T> struct left;
template <class T> struct right;
Algebraic data type with two constructors: left and right. It can be used to represent values that fall into one of two categories. When it is used for error reporting, right represents success and left represents failure.
#include <mpllibs/metamonad/either.hpp>
using boost::mpl::equal_to;
using boost::mpl::int_;
struct division_by_zero;
template <class A, class B>
struct divide :
if_<
equal_to<A, int_<0>>,
left<division_by_zero>,
right<divides<A, B>>
>
{};
Copyright Abel Sinkovics (abel at elte dot hu) 2011. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt