    double _eval(CImg<T> *const img_output, const char *const expression,
                 const double x, const double y, const double z, const double c,
                 CImgList<T> *const list_images) const {
      if (!expression || !*expression) return 0;
      double _val = 0;
      if (__eval(expression,_val)) return _val;
      _cimg_math_parser mp(expression + (*expression=='>' || *expression=='<' ||
                                         *expression=='*' || *expression==':'),"eval",
                           *this,img_output,list_images,false);
      mp.begin_t();
      const double val = mp(x,y,z,c);
      mp.end_t();
      mp.end();
      return val;
    }
    double _eval(CImg<T> *const img_output, const char *const expression,
                 const double x, const double y, const double z, const double c,
                 CImgList<T> *const list_images) const {
      if (!expression || !*expression) return 0;
      double _val = 0;
      if (__eval(expression,_val)) return _val;
      _cimg_math_parser mp(expression + (*expression=='>' || *expression=='<' ||
                                         *expression=='*' || *expression==':'),"eval",
                           *this,img_output,list_images,false);
      mp.begin_t();
      const double val = mp(x,y,z,c);
      mp.end_t();
      mp.end();
      return val;
    }