On 10/13/07, John Maddock
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? Thanks, Peng