Sorry for the ugly patch, but Vcs is broken on my machine, and prdiff
neither works.
Index: 10.222/olena/ChangeLog
Index: 10.222/olena/oln/arith/internal/opdecls.hh
--- 10.222/olena/ChangeLog Thu, 15 Sep 2005 17:50:38 +0200 levill_r (oln/o/30_ChangeLog
1.27.1.36.1.3.1.11.1.5.1.64.1.47.1.93.1.27.2.4 600)
+++ 10.222(w)/olena/ChangeLog Wed, 21 Jun 2006 19:30:10 +0200 levill_r (oln/o/30_ChangeLog
1.27.1.36.1.3.1.11.1.5.1.64.1.47.1.93.1.27.2.4 600)
@@ -1,3 +1,8 @@
+2006-06-21 Roland Levillain <roland(a)lrde.epita.fr>
+
+ * oln/arith/internal/opdecls.hh (oln_arith_declare_binop_procs_):
+ Remove the third operator, causing a an ambiguity with G++ 4.0.
+
2005-09-15 Roland Levillain <roland(a)lrde.epita.fr>
Adjust for G++ 4.0.
--- 10.222/olena/oln/arith/internal/opdecls.hh Tue, 13 Apr 2004 17:31:32 +0200 van-vl_n
(oln/b/22_opdecls.hh 1.19 600)
+++ 10.222(w)/olena/oln/arith/internal/opdecls.hh Fri, 16 Jun 2006 17:50:32 +0200 levill_r
(oln/b/22_opdecls.hh 1.19 600)
@@ -218,18 +218,41 @@
T2, \
ntg_return_type(OPNAME, T1, T2)>()), \
input1, input2); \
- } \
- \
- /* Same as above, with inline conversion in the functor. */ \
- template<class IRet, class I1, class I2> inline \
- typename mute<I1, oln_value_type(IRet)>::ret \
- OPNAME(const abstract::image<I1>& input1, const
abstract::image<I2>& input2) \
- { \
- return apply2(f_##OPNAME<oln_value_type(I1), \
- oln_value_type(I2), \
- oln_value_type(IRet)>(), \
- input1, input2); \
}
+/* FIXME: Used to be part from the previous macro, but causes ambiguous
+ calls with G++ 4.0 and 4.1: theses compiler seems to consider that
+
+ OPNAME(ima1, ima2);
+
+ could be both interpreted as a call to
+
+ template<class I1, class I2> inline
+ typename arith_return_type_proxy_##OPNAME##_<I1, I2>::ret
+ OPNAME(const abstract::image<I1>& input1,
+ const abstract::image<I2>& input2)
+
+ or
+
+ template<class IRet, class I1, class I2> inline
+ typename mute<I1, oln_value_type(IRet)>::ret
+ OPNAME(const abstract::image<I1>& input1,
+ const abstract::image<I2>& input2)
+
+ despite the fact that this call doesn't resolve the first parameter
+ (`IRet') of the second version. It might be a bug in the 4.x branch
+ of G++. */
+//
+//
+// /* Same as above, with inline conversion in the functor. */
+// template<class IRet, class I1, class I2> inline
+// typename mute<I1, oln_value_type(IRet)>::ret
+// OPNAME(const abstract::image<I1>& input1, const
abstract::image<I2>& input2)
+// {
+// return apply2(f_##OPNAME<oln_value_type(I1),
+// oln_value_type(I2),
+// oln_value_type(IRet)>(),
+// input1, input2);
+// }
/// Apply OPNAME with a constant as second operand.
# define oln_arith_declare_binopcst_procs_(OPNAME) \