$include_dir="/home/hyper-archives/ublas/include"; include("$include_dir/msg-header.inc") ?>
From: Neal Becker (ndbecker2_at_[hidden])
Date: 2007-08-23 14:35:28
This patch does 2 things:
1) enable mixed int/complex arith
2) use boost typeof for return type deduction
diff -r 1be5d7eb10aa boost/numeric/ublas/traits.hpp
--- a/boost/numeric/ublas/traits.hpp    Mon Aug 20 09:58:57 2007 -0400
+++ b/boost/numeric/ublas/traits.hpp    Thu Aug 23 14:34:22 2007 -0400
@@ -27,8 +27,44 @@
 
 #include <boost/type_traits.hpp>
 #include <complex>
+#include <boost/typeof/typeof.hpp>
 
 namespace boost { namespace numeric { namespace ublas {
+
+typedef std::complex<double> complex_t;
+
+inline complex_t operator+ (int in1, complex_t in2) {
+  return double(in1) + in2;
+}
+
+inline complex_t operator+ (complex_t in1, int in2) {
+  return in1 + double(in2);
+}
+
+inline complex_t operator- (int in1, complex_t in2) {
+  return double(in1) - in2;
+}
+
+inline complex_t operator- (complex_t in1, int in2) {
+  return in1 - double(in2);
+}
+
+inline complex_t operator* (int in1, complex_t in2) {
+  return double(in1) * in2;
+}
+
+inline complex_t operator* (complex_t in1, int in2) {
+  return in1 * double(in2);
+}
+
+inline complex_t operator/ (int in1, complex_t in2) {
+  return double(in1) / in2;
+}
+
+inline complex_t operator/ (complex_t in1, int in2) {
+  return in1 / double(in2);
+}
+
 
     // Use Joel de Guzman's return type deduction
     // uBLAS assumes a common return type for all binary arithmetic operators
@@ -37,17 +73,19 @@ namespace boost { namespace numeric { na
         typedef type_deduction_detail::base_result_of<X, Y> base_type;
         static typename base_type::x_type x;
         static typename base_type::y_type y;
-        static const std::size_t size = sizeof (
-                type_deduction_detail::test<
-                    typename base_type::x_type
-                  , typename base_type::y_type
-                >(x + y)     // Use x+y to stand of all the arithmetic actions
-            );
-
-        static const std::size_t index = (size / sizeof (char)) - 1;
-        typedef typename mpl::at_c<
-            typename base_type::types, index>::type id;
-        typedef typename id::type promote_type;
+//         static const std::size_t size = sizeof (
+//                 type_deduction_detail::test<
+//                     typename base_type::x_type
+//                   , typename base_type::y_type
+//                 >(x + y)     // Use x+y to stand of all the arithmetic actions
+//             );
+
+//         static const std::size_t index = (size / sizeof (char)) - 1;
+//         typedef typename mpl::at_c<
+//             typename base_type::types, index>::type id;
+      //        typedef typename id::type promote_type;
+      //      typedef typeof (X() + Y()) promote_type;
+      typedef BOOST_TYPEOF (X() + Y()) promote_type;
     };