summaryrefslogtreecommitdiff
path: root/gmpxx.h
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2012-07-28 21:46:42 +0200
committerMarc Glisse <marc.glisse@inria.fr>2012-07-28 21:46:42 +0200
commite6926618985a756d4e7f00afcb842a161648fc41 (patch)
treebd98cfaa128dc10f19238ca29065b690c18893a5 /gmpxx.h
parentec2771c7ec87413b667f3b8889e74ffb5a90ffe3 (diff)
downloadgmp-e6926618985a756d4e7f00afcb842a161648fc41.tar.gz
Specialize std::common_type for expressions with builtin types.
Diffstat (limited to 'gmpxx.h')
-rw-r--r--gmpxx.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/gmpxx.h b/gmpxx.h
index 97c5e1907..e131da80a 100644
--- a/gmpxx.h
+++ b/gmpxx.h
@@ -1365,6 +1365,31 @@ namespace std {
{
typedef __gmp_expr<T, U> type;
};
+
+#define __GMPXX_DECLARE_COMMON_TYPE(typ) \
+ template <class T, class U> \
+ struct common_type <__gmp_expr<T, U>, typ > \
+ { \
+ typedef __gmp_expr<T, T> type; \
+ }; \
+ \
+ template <class T, class U> \
+ struct common_type <typ, __gmp_expr<T, U> > \
+ { \
+ typedef __gmp_expr<T, T> type; \
+ }
+
+ __GMPXX_DECLARE_COMMON_TYPE(signed char);
+ __GMPXX_DECLARE_COMMON_TYPE(unsigned char);
+ __GMPXX_DECLARE_COMMON_TYPE(signed int);
+ __GMPXX_DECLARE_COMMON_TYPE(unsigned int);
+ __GMPXX_DECLARE_COMMON_TYPE(signed short int);
+ __GMPXX_DECLARE_COMMON_TYPE(unsigned short int);
+ __GMPXX_DECLARE_COMMON_TYPE(signed long int);
+ __GMPXX_DECLARE_COMMON_TYPE(unsigned long int);
+ __GMPXX_DECLARE_COMMON_TYPE(float);
+ __GMPXX_DECLARE_COMMON_TYPE(double);
+#undef __GMPXX_DECLARE_COMMON_TYPE
}
#endif