Проблема возникает только из возвращаемого типа DateFormat, представляющего собой char * - std :: strings обычно могут без проблем объединяться со строковыми литералами.
например. следующие работы:
std::string a, b;
b = "foo";
a = "literal" + b + "literal";
, но следующее не будет работать:
std::string a, b;
b = "foo";
a = "literal" + b.c_str() + "literal";
Единственное требуемое изменение должно заключаться в преобразовании результата из DateFormat в std :: string.
s="TO_DATE('" + std::string(DateFormat("%d/%m/%Y",Date)) + "','dd/MM/YYYY')";
Должен сделать свое дело.
Редактировать 1
Видя, что DateFormat возвращает строку, проблем с конкатенацией литерала + std :: string + literal не должно было возникнуть. Так что я в тупике.
Редактировать 2
После того, как Амардип заметил, что DateFormat на самом деле возвращает символ *, несмотря на подпись, указывающую на обратное (хороший улов). Я проверил, и это действительно кажется, что никаких ошибок или предупреждений не возникает, даже при компиляции с -Wall и -Wextra на gcc, функция ведет себя так, как если бы она просто защищала char *.
Так что мое решение должно работать по первоначальным причинам. (и нет реальной проблемы с конкатенацией строковых литералов с помощью std :: string, проблема только в char * со строковыми литералами).
Вероятно, было бы более точное решение для устранения корня проблемы - неверный тип возвращаемого значения DateFormat путем преобразования sFormatted в std :: string.
return std::string(sFormatted);