From e1aef0445bf123d2de000bc7f2ef97b9f788eea0 Mon Sep 17 00:00:00 2001 From: Lovell Fuller Date: Sat, 15 Oct 2016 20:50:32 +0100 Subject: [PATCH] MSVC requires __declspec first for return by reference Ensure consistent modifier order across all exported functions Move assignment operators to be "outside" definitions to aid export --- cplusplus/VImage.cpp | 120 +++++++++--------- cplusplus/include/vips/VImage8.h | 210 +++++++++++++++---------------- 2 files changed, 165 insertions(+), 165 deletions(-) diff --git a/cplusplus/VImage.cpp b/cplusplus/VImage.cpp index 9e798347..d9b55133 100644 --- a/cplusplus/VImage.cpp +++ b/cplusplus/VImage.cpp @@ -770,21 +770,21 @@ operator+( VImage a, std::vector b ) } VImage & -VImage::operator+=( const VImage b ) +operator+=( VImage a, const VImage b ) { - return( *this = *this + b ); + return( a = a + b ); } VImage & -VImage::operator+=( const double b ) +operator+=( VImage a, const double b ) { - return( *this = *this + b ); + return( a = a + b ); } VImage & -VImage::operator+=( std::vector b ) +operator+=( VImage a, std::vector b ) { - return( *this = *this + b ); + return( a = a + b ); } VImage @@ -818,21 +818,21 @@ operator-( VImage a, std::vector b ) } VImage & -VImage::operator-=( const VImage b ) +operator-=( VImage a, const VImage b ) { - return( *this = *this - b ); + return( a = a - b ); } VImage & -VImage::operator-=( const double b ) +operator-=( VImage a, const double b ) { - return( *this = *this - b ); + return( a = a - b ); } VImage & -VImage::operator-=( std::vector b ) +operator-=( VImage a, std::vector b ) { - return( *this = *this - b ); + return( a = a - b ); } VImage @@ -872,21 +872,21 @@ operator*( VImage a, std::vector b ) } VImage & -VImage::operator*=( const VImage b ) +operator*=( VImage a, const VImage b ) { - return( *this = *this * b ); + return( a = a * b ); } VImage & -VImage::operator*=( const double b ) +operator*=( VImage a, const double b ) { - return( *this = *this * b ); + return( a = a * b ); } VImage & -VImage::operator*=( std::vector b ) +operator*=( VImage a, std::vector b ) { - return( *this = *this * b ); + return( a = a * b ); } VImage @@ -920,21 +920,21 @@ operator/( VImage a, std::vector b ) } VImage & -VImage::operator/=( const VImage b ) +operator/=( VImage a, const VImage b ) { - return( *this = *this / b ); + return( a = a / b ); } VImage & -VImage::operator/=( const double b ) +operator/=( VImage a, const double b ) { - return( *this = *this / b ); + return( a = a / b ); } VImage & -VImage::operator/=( std::vector b ) +operator/=( VImage a, std::vector b ) { - return( *this = *this / b ); + return( a = a / b ); } VImage @@ -956,21 +956,21 @@ operator%( VImage a, std::vector b ) } VImage & -VImage::operator%=( const VImage b ) +operator%=( VImage a, const VImage b ) { - return( *this = *this % b ); + return( a = a % b ); } VImage & -VImage::operator%=( const double b ) +operator%=( VImage a, const double b ) { - return( *this = *this % b ); + return( a = a % b ); } VImage & -VImage::operator%=( std::vector b ) +operator%=( VImage a, std::vector b ) { - return( *this = *this % b ); + return( a = a % b ); } VImage @@ -1210,21 +1210,21 @@ operator&( VImage a, std::vector b ) } VImage & -VImage::operator&=( const VImage b ) +operator&=( VImage a, const VImage b ) { - return( *this = *this & b ); + return( a = a & b ); } VImage & -VImage::operator&=( const double b ) +operator&=( VImage a, const double b ) { - return( *this = *this & b ); + return( a = a & b ); } VImage & -VImage::operator&=( std::vector b ) +operator&=( VImage a, std::vector b ) { - return( *this = *this & b ); + return( a = a & b ); } VImage @@ -1260,21 +1260,21 @@ operator|( VImage a, std::vector b ) } VImage & -VImage::operator|=( const VImage b ) +operator|=( VImage a, const VImage b ) { - return( *this = *this | b ); + return( a = a | b ); } VImage & -VImage::operator|=( const double b ) +operator|=( VImage a, const double b ) { - return( *this = *this | b ); + return( a = a | b ); } VImage & -VImage::operator|=( std::vector b ) +operator|=( VImage a, std::vector b ) { - return( *this = *this | b ); + return( a = a | b ); } VImage @@ -1310,21 +1310,21 @@ operator^( VImage a, std::vector b ) } VImage & -VImage::operator^=( const VImage b ) +operator^=( VImage a, const VImage b ) { - return( *this = *this ^ b ); + return( a = a ^ b ); } VImage & -VImage::operator^=( const double b ) +operator^=( VImage a, const double b ) { - return( *this = *this ^ b ); + return( a = a ^ b ); } VImage & -VImage::operator^=( std::vector b ) +operator^=( VImage a, std::vector b ) { - return( *this = *this ^ b ); + return( a = a ^ b ); } VImage @@ -1347,21 +1347,21 @@ operator<<( VImage a, std::vector b ) } VImage & -VImage::operator<<=( const VImage b ) +operator<<=( VImage a, const VImage b ) { - return( *this = *this << b ); + return( a = a << b ); } VImage & -VImage::operator<<=( const double b ) +operator<<=( VImage a, const double b ) { - return( *this = *this << b ); + return( a = a << b ); } VImage & -VImage::operator<<=( std::vector b ) +operator<<=( VImage a, std::vector b ) { - return( *this = *this << b ); + return( a = a << b ); } VImage @@ -1384,21 +1384,21 @@ operator>>( VImage a, std::vector b ) } VImage & -VImage::operator>>=( const VImage b ) +operator>>=( VImage a, const VImage b ) { - return( *this = *this << b ); + return( a = a << b ); } VImage & -VImage::operator>>=( const double b ) +operator>>=( VImage a, const double b ) { - return( *this = *this << b ); + return( a = a << b ); } VImage & -VImage::operator>>=( std::vector b ) +operator>>=( VImage a, std::vector b ) { - return( *this = *this << b ); + return( a = a << b ); } VIPS_NAMESPACE_END diff --git a/cplusplus/include/vips/VImage8.h b/cplusplus/include/vips/VImage8.h index c2f480ed..1480b12c 100644 --- a/cplusplus/include/vips/VImage8.h +++ b/cplusplus/include/vips/VImage8.h @@ -775,137 +775,137 @@ public: std::vector operator()( int x, int y ); - friend VImage VIPS_CPLUSPLUS_API operator+( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator+( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator+( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator+( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator+( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator+( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator+( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator+( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator+( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator+( VImage a, std::vector b ); - VImage & VIPS_CPLUSPLUS_API operator+=( const VImage b ); - VImage & VIPS_CPLUSPLUS_API operator+=( const double b ); - VImage & VIPS_CPLUSPLUS_API operator+=( const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & operator+=( VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & operator+=( VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & operator+=( VImage a, const std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator-( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator-( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator-( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator-( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator-( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator-( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator-( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator-( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator-( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator-( VImage a, std::vector b ); - VImage & VIPS_CPLUSPLUS_API operator-=( const VImage b ); - VImage & VIPS_CPLUSPLUS_API operator-=( const double b ); - VImage & VIPS_CPLUSPLUS_API operator-=( const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & operator-=( VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & operator-=( VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & operator-=( VImage a, const std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator-( VImage a ); + friend VIPS_CPLUSPLUS_API VImage operator-( VImage a ); - friend VImage VIPS_CPLUSPLUS_API operator*( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator*( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator*( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator*( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator*( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator*( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator*( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator*( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator*( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator*( VImage a, std::vector b ); - VImage & VIPS_CPLUSPLUS_API operator*=( const VImage b ); - VImage & VIPS_CPLUSPLUS_API operator*=( const double b ); - VImage & VIPS_CPLUSPLUS_API operator*=( const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & operator*=( VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & operator*=( VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & operator*=( VImage a, const std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator/( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator/( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator/( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator/( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator/( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator/( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator/( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator/( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator/( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator/( VImage a, std::vector b ); - VImage & VIPS_CPLUSPLUS_API operator/=( const VImage b ); - VImage & VIPS_CPLUSPLUS_API operator/=( const double b ); - VImage & VIPS_CPLUSPLUS_API operator/=( const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & operator/=( VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & operator/=( VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & operator/=( VImage a, const std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator%( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator%( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator%( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator%( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator%( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator%( VImage a, std::vector b ); - VImage & VIPS_CPLUSPLUS_API operator%=( const VImage b ); - VImage & VIPS_CPLUSPLUS_API operator%=( const double b ); - VImage & VIPS_CPLUSPLUS_API operator%=( const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & operator%=( VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & operator%=( VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & operator%=( VImage a, const std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator<( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator<( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator<( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator<( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator<( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator<( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator<( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator<( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator<( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator<( VImage a, std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator<=( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator<=( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator<=( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator<=( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator<=( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator<=( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator<=( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator<=( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator<=( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator<=( VImage a, std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator>( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator>( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator>( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator>( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator>( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator>( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator>( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator>( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator>( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator>( VImage a, std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator>=( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator>=( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator>=( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator>=( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator>=( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator>=( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator>=( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator>=( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator>=( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator>=( VImage a, std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator==( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator==( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator==( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator==( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator==( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator==( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator==( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator==( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator==( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator==( VImage a, std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator!=( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator!=( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator!=( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator!=( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator!=( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator!=( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator!=( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator!=( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator!=( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator!=( VImage a, std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator&( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator&( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator&( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator&( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator&( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator&( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator&( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator&( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator&( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator&( VImage a, std::vector b ); - VImage & VIPS_CPLUSPLUS_API operator&=( const VImage b ); - VImage & VIPS_CPLUSPLUS_API operator&=( const double b ); - VImage & VIPS_CPLUSPLUS_API operator&=( const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & operator&=( VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & operator&=( VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & operator&=( VImage a, const std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator|( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator|( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator|( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator|( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator|( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator|( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator|( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator|( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator|( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator|( VImage a, std::vector b ); - VImage & VIPS_CPLUSPLUS_API operator|=( const VImage b ); - VImage & VIPS_CPLUSPLUS_API operator|=( const double b ); - VImage & VIPS_CPLUSPLUS_API operator|=( const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & operator|=( VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & operator|=( VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & operator|=( VImage a, const std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator^( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator^( double a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator^( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator^( std::vector a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator^( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator^( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator^( double a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator^( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator^( std::vector a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator^( VImage a, std::vector b ); - VImage & VIPS_CPLUSPLUS_API operator^=( const VImage b ); - VImage & VIPS_CPLUSPLUS_API operator^=( const double b ); - VImage & VIPS_CPLUSPLUS_API operator^=( const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & operator^=( VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & operator^=( VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & operator^=( VImage a, const std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator<<( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator<<( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator<<( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator<<( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator<<( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator<<( VImage a, std::vector b ); - VImage & VIPS_CPLUSPLUS_API operator<<=( const VImage b ); - VImage & VIPS_CPLUSPLUS_API operator<<=( const double b ); - VImage & VIPS_CPLUSPLUS_API operator<<=( const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & operator<<=( VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & operator<<=( VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & operator<<=( VImage a, const std::vector b ); - friend VImage VIPS_CPLUSPLUS_API operator>>( VImage a, VImage b ); - friend VImage VIPS_CPLUSPLUS_API operator>>( VImage a, double b ); - friend VImage VIPS_CPLUSPLUS_API operator>>( VImage a, std::vector b ); + friend VIPS_CPLUSPLUS_API VImage operator>>( VImage a, VImage b ); + friend VIPS_CPLUSPLUS_API VImage operator>>( VImage a, double b ); + friend VIPS_CPLUSPLUS_API VImage operator>>( VImage a, std::vector b ); - VImage & VIPS_CPLUSPLUS_API operator>>=( const VImage b ); - VImage & VIPS_CPLUSPLUS_API operator>>=( const double b ); - VImage & VIPS_CPLUSPLUS_API operator>>=( const std::vector b ); + friend VIPS_CPLUSPLUS_API VImage & operator>>=( VImage a, const VImage b ); + friend VIPS_CPLUSPLUS_API VImage & operator>>=( VImage a, const double b ); + friend VIPS_CPLUSPLUS_API VImage & operator>>=( VImage a, const std::vector b ); };