Флаги G ++ для отключения ошибки «временная неконстантная ссылка» - PullRequest
2 голосов
/ 16 июня 2011

Я ищу некоторые флаги командной строки (если они существуют), которые отключают ошибку GCC для этого типа кода C ++:

#include <string>

void m(std::string& s) { }

int main()
{
        m(std::string(""));
}

G ++ выдает эту ошибку:

ошибка: неверная инициализация неконстантной ссылки типа 'std :: string &' из временного типа 'std :: string'

Причина заключается в возможности быстрого перехода с VC ++ и Sun Studio (без каких-либо изменений кода), поскольку оба молча принимают временные преобразования в неконстантные l-значения. Я знаю, что нужно сделать с точки зрения изменения кода - я строго спрашиваю, как это сделать без внесения изменений в код .

Я буду использовать GCC 4.x.

Ответы [ 3 ]

4 голосов
/ 16 июня 2011

Почему нужно отключить ошибку ? Исправьте код, а не полагайтесь на расширения поставщика.

3 голосов
/ 16 июня 2011

Это не соответствует стандарту, и нет возможности отключить это с помощью флагов в GCC.

Vc ++ ошибочно поддерживает это из-за нестандартного расширения. Попробуйте с флагом /Za (отключить расширение языка), и вы должны увидеть ошибки.

Или используйте флаг /W4, чтобы получить максимальное количество предупреждений, и он покажет вам:

warning C4239: nonstandard extension used

2 голосов
/ 16 июня 2011

Вы можете попытаться создать свой код с помощью CLang.

Было проделано много работы над CLang для обеспечения совместимости с исходными файлами VC ++ (как STL, так и кодом MFC), и, как следствие, CLang имеет -fms-extensions помечает, чтобы разрешить эти расширения, и генерирует соответствующий код.

Большая часть MFC компилируется, поэтому большинство расширений, включая другие странности в шаблонах, также покрыты.

...