      static double mp_string(_cimg_math_parser& mp) {
        double *const ptrd = &_mp_arg(1) + 1;
        const unsigned int nb_args = (unsigned int)(mp.opcode[3] - 3)/2;
        CImgList<charT> _str;
        CImg<charT> it;
        for (unsigned int n = 0; n<nb_args; ++n) {
          const unsigned int siz = (unsigned int)mp.opcode[5 + 2*n];
          if (siz) { // Vector argument -> string
            const double *ptr = &_mp_arg(4 + 2*n) + 1;
            unsigned int l = 0;
            while (l<siz && ptr[l]) ++l;
            CImg<doubleT>(ptr,l,1,1,1,true).move_to(_str);
          } else { // Scalar argument -> number
            it.assign(24);
            cimg_snprintf(it,it._width,"%.17g",_mp_arg(4 + 2*n));
            CImg<charT>::string(it,false,true).move_to(_str);
          }
        }
        const CImg<charT> str = _str>'x';
        const unsigned int sizd = std::min(str._width,(unsigned int)mp.opcode[2]);
        std::memset(ptrd,0,mp.opcode[2]*sizeof(double));
        for (unsigned int k = 0; k<sizd; ++k) ptrd[k] = (double)str[k];
        return cimg::type<double>::nan();
      }
      static double mp_string(_cimg_math_parser& mp) {
        double *const ptrd = &_mp_arg(1) + 1;
        const unsigned int nb_args = (unsigned int)(mp.opcode[3] - 3)/2;
        CImgList<charT> _str;
        CImg<charT> it;
        for (unsigned int n = 0; n<nb_args; ++n) {
          const unsigned int siz = (unsigned int)mp.opcode[5 + 2*n];
          if (siz) {  
            const double *ptr = &_mp_arg(4 + 2*n) + 1;
            unsigned int l = 0;
            while (l<siz && ptr[l]) ++l;
            CImg<doubleT>(ptr,l,1,1,1,true).move_to(_str);
          } else {  
            it.assign(24);
            cimg_snprintf(it,it._width,"%.17g",_mp_arg(4 + 2*n));
            CImg<charT>::string(it,false,true).move_to(_str);
          }
        }
        const CImg<charT> str = _str>'x';
        const unsigned int sizd = std::min(str._width,(unsigned int)mp.opcode[2]);
        std::memset(ptrd,0,mp.opcode[2]*sizeof(double));
        for (unsigned int k = 0; k<sizd; ++k) ptrd[k] = (double)str[k];
        return cimg::type<double>::nan();
      }