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@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@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) \