template<class T> int sign(const T& a){return (T(0) < a) - (a < T(0));}
の方がいいんでねぇかなぁ。