    void _eval(CImg<t>& output, 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) { output.assign(1); *output = 0; return; }
      double _val = 0;
      if (__eval(expression,_val)) { output.assign(1); *output = _val; return; }
      _cimg_math_parser mp(expression + (*expression=='>' || *expression=='<' ||
                                         *expression=='*' || *expression==':'),"eval",
                           *this,img_output,list_images,false);
      output.assign(1,std::max(1U,mp.result_dim));
      mp.begin_t();
      mp(x,y,z,c,output._data);
      mp.end_t();
      mp.end();
    }
    void _eval(CImg<t>& output, 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) { output.assign(1); *output = 0; return; }
      double _val = 0;
      if (__eval(expression,_val)) { output.assign(1); *output = _val; return; }
      _cimg_math_parser mp(expression + (*expression=='>' || *expression=='<' ||
                                         *expression=='*' || *expression==':'),"eval",
                           *this,img_output,list_images,false);
      output.assign(1,std::max(1U,mp.result_dim));
      mp.begin_t();
      mp(x,y,z,c,output._data);
      mp.end_t();
      mp.end();
    }