Phoenix で variant を返す条件演算子

Boost.Phoenix の if で戻り値を返す - C++でゲームプログラミング
Phoenix の if_else は then 節と else 節の common_type を返しますが,それらの型が異なる場合は variant に収めて返すという戦略もあるでしょう.Phoenix ではそのような条件演算子もユーザーが書くことができます (Proto の知識は必要ありません).
if2.hpp
https://gist.github.com/1130400
if2.cpp

#include <iostream>
#include <boost/phoenix/core/argument.hpp>
#include <boost/phoenix/core/value.hpp>
#include <boost/phoenix/operator/arithmetic.hpp>
#include <boost/phoenix/operator/comparision.hpp>
#include "if2.hpp"

int main()
{
    using namespace boost::phoenix;
    using namespace boost::phoenix::arg_names;

    // divide = \x y -> if y == 0 then Left "division by zero" else Right (x `div` y)
    auto const divide = if2(arg2 == 0, val("division by zero"), arg1 / arg2);

    std::cout << divide(54, 6) << '\n';
    // 9

    std::cout << divide(54, 0) << '\n';
    // division by zero
}