typename std::enable_if< std::is_integral<T>::value, typename boost::proto::result_of::make_expr< boost::proto::tag::function, abs_func, const vex::multivector<T, N>& >::type const >::type abs(const multivector<T, N> &arg) { return boost::proto::make_expr<boost::proto::tag::function>( abs_func(), boost::ref(arg) ); }
string signed2str(T val, T (*abs_func) (T), DT (*div_func) (T, T)) { char buffer[64] = {0,0}; int i=62; DT d; d.quot = abs_func(val); do{ d = div_func(d.quot,10); buffer[i] = _int2str_lookup[d.rem]; }while(--i && d.quot); if (i && (val<0)) { buffer[i]='-'; i--; } return string((char*)(buffer+i+1)); }