      static double mp_mproj(_cimg_math_parser& mp) {
        double *ptrd = &_mp_arg(1) + 1;
        const double
          *ptrS = &_mp_arg(2) + 1,
          *ptrD = &_mp_arg(5) + 1;
        const unsigned int
          wS = (unsigned int)mp.opcode[3],
          hS = (unsigned int)mp.opcode[4],
          wD = (unsigned int)mp.opcode[6];
        const int
          method = std::max(0,(int)_mp_arg(7)),
          max_iter = std::max(0,(int)_mp_arg(8));
        const double
          max_residual = std::max(0.,_mp_arg(9));

        CImg<doubleT>(ptrd,wS,wD,1,1,true) = CImg<doubleT>(ptrS,wS,hS,1,1,false).
          project_matrix(CImg<doubleT>(ptrD,wD,hS,1,1,true),method,max_iter,max_residual);
        return cimg::type<double>::nan();
      }
      static double mp_mproj(_cimg_math_parser& mp) {
        double *ptrd = &_mp_arg(1) + 1;
        const double
          *ptrS = &_mp_arg(2) + 1,
          *ptrD = &_mp_arg(5) + 1;
        const unsigned int
          wS = (unsigned int)mp.opcode[3],
          hS = (unsigned int)mp.opcode[4],
          wD = (unsigned int)mp.opcode[6];
        const int
          method = std::max(0,(int)_mp_arg(7)),
          max_iter = std::max(0,(int)_mp_arg(8));
        const double
          max_residual = std::max(0.,_mp_arg(9));

        CImg<doubleT>(ptrd,wS,wD,1,1,true) = CImg<doubleT>(ptrS,wS,hS,1,1,false).
          project_matrix(CImg<doubleT>(ptrD,wD,hS,1,1,true),method,max_iter,max_residual);
        return cimg::type<double>::nan();
      }