T perform(value const &v) { return v.to_number(); }
T perform(value const &v) { double num = v.to_number(); if (num < double(limits::min()) || num > double(limits::max())) throw exception("Not inside integer range", "RangeError"); return T(num); }