void-packages/srcpkgs/hugin/patches/hugin-2013-boost-156.diff
2015-06-09 20:30:03 +02:00

81 lines
2.1 KiB
Diff

--- src/tools/ParseExp.cpp 2013-10-27 10:19:02.000000000 +0100
+++ src/tools/ParseExp.cpp 2014-09-12 01:41:15.468973470 +0200
@@ -50,37 +50,45 @@
//power function
struct lazy_pow_
{
- template <typename X, typename Y>
- struct result { typedef X type; };
+ template<class> struct result;
+
+ template <typename F, typename X, typename Y>
+ struct result<F(X,Y)> { typedef X& type; };
template <typename X, typename Y>
- X operator()(X x, Y y) const
+ X& operator()(X& x, Y y) const
{
- return std::pow(x, y);
+ x= std::pow(x, y);
+ return x;
}
};
// modulus for double values
struct lazy_mod_
{
- template <typename X, typename Y>
- struct result { typedef X type; };
+ template<class> struct result;
+
+ template <typename F, typename X, typename Y>
+ struct result<F(X,Y)> { typedef X& type; };
template <typename X, typename Y>
- X operator()(X x, Y y) const
+ X& operator()(X& x, Y y) const
{
- return std::fmod(x,y);
+ x= std::fmod(x,y);
+ return x;
}
};
// if statement
struct lazy_if_
{
- template <typename X, typename Y, typename Z>
- struct result { typedef Y type; };
+ template<class> struct result;
- template <typename X, typename Y, typename Z>
- X operator()(X x, Y y, Z z) const
+ template <typename F, typename X, typename Y>
+ struct result<F(X,Y,Y)> { typedef Y& type; };
+
+ template <typename X, typename Y>
+ Y& operator()(X x, Y& y, Y& z) const
{
return x ? y : z;
}
@@ -89,13 +97,16 @@
// wrapper for unary function
struct lazy_ufunc_
{
- template <typename F, typename A1>
- struct result { typedef A1 type; };
+ template<class> struct result;
+
+ template<typename F, typename F1, typename A1>
+ struct result<F(F1,A1)> { typedef A1& type; };
template <typename F, typename A1>
- A1 operator()(F f, A1 a1) const
+ A1& operator()(F f, A1& a1) const
{
- return f(a1);
+ a1= f(a1);
+ return a1;
}
};