g ++ в Ubuntu 16.04 по умолчанию является компилятором C ++ 03, если параметр -std
не указывает другую более новую версию C ++.
g ++ в Ubuntu 18.04 по умолчанию является компилятором C ++ 14, там сравнение указателя с int
(приведено из char '\0'
) недопустимо.
Я думаю, что код if (current != '\0')
, где current
- указатель, является подозрительным и, возможно, это ошибка Должно быть
if (*current != '\0')
Или
if (current != 0) // before C++11
if (current != nullptr) // since C++11
if (current) // for both before and since C++11
Невозможно без контекста (MCVE) решить, следует ли использовать current
или *current
.
UPDATE
Я посмотрел код крутящего момента 6.1.2. Определенно, есть ошибка.
char *current;
// ...
this->task_count = strtol(submission_str, ¤t, 10);
//...
if (*current == ':')
current++;
else if (current != '\0') // BUG is here, it must be (*current != '\0')
{
error = "Invalid task specification";
return(PBSE_BAD_PARAMETER);
}