on Sat Oct 13 2007, "Peng Yu"
On 10/13/07, John Maddock
wrote: Peng Yu wrote:
Hi,
Suppose I define a class fixed_point as
class fixed_point{ ....some operations are defined here
private: int _integer_part; unsigned _fractional_part }
I want is_arithmetic
::type to be true_ The aim of is_arithmetic is that it returns true only for built-in arithmetic types: in other words it's a type introspection tool. If you specialise it for UDT's you will very likely break other code (for example has_trivial_XXX assumes that all arithmetic types have trivial construct/asign/copy/destroy operations). Probably the correct traits to be specialising (and using to detect "numbers") is std::numeric_limits.
Unfortunately, there are not types that contain constants in std::numeric_limits as in the boost type_traits library. If I want do metaprogramming based the types, I can not used numeric_limits. You have a point that specialize is_arithmetic might break other code. But are there any other walk around for this problem of adding user defined types?
Yes. template <class T> struct my_is_arithmetic : boost::is_arithmetic<T> {}; now use my_is_arithmetic and specialize it for fixed_point. -- Dave Abrahams Boost Consulting http://www.boost-consulting.com