#include <cassert>
#include <algorithm>
#include <boost/config/no_tr1/functional.hpp>
#include <boost/throw_exception.hpp>
#include <boost/config.hpp>
#include <boost/function/function_base.hpp>
#include <boost/type_traits/is_integral.hpp>
#include <boost/preprocessor/enum.hpp>
#include <boost/preprocessor/enum_params.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/repeat.hpp>
#include <boost/preprocessor/inc.hpp>
#include <boost/type_traits/is_void.hpp>