gcc TemplateClass <:: GlobalSymbol> ошибка в <:: - PullRequest
4 голосов
/ 03 февраля 2012

По какой-то причине gcc не нравится, когда параметр шаблона является глобальным символом пространства имен, т.е.

TemplateClass<::GlobalSymbol>

Он работает, когда я

TemplateClass< ::GlobalSymbol>

То есть gcc не любитчтобы увидеть <:: </p>

Можно ли предотвратить без изменения источников (которые автоматически генерируются)?

UPD: я не хочу изменять источники.Я обнаружил, что -fpermissive, кажется, меняет это на предупреждение вместо ошибки, но пока не нашел, как включить его из кода (например, с использованием прагм).

UPD: Хорошо, я обнаружил, что

 #pragma GCC diagnostic ignored "-fpermissive"

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

Ответы [ 2 ]

8 голосов
/ 03 февраля 2012

<: является орграфом , что эквивалентно [, таким образом, ошибка. Поскольку вы не хотите изменять код, обходным решением является использование -fpermissive аргумента командной строки или прагмы для G ++ (на самом деле это подсказка):

test.cpp:9:16: note: (if you use ‘-fpermissive’ G++ will accept your code)
0 голосов
/ 03 февраля 2012

С gcc 4.6 я получаю следующую ошибку:

graphs.cpp: In function ‘int main()’:
graphs.cpp:9:15: error: ‘<::’ cannot begin a template-argument list [-fpermissive]
graphs.cpp:9:15: note: ‘<:’ is an alternate spelling for ‘[’. Insert whitespace between ‘<’ and ‘::’
graphs.cpp:9:15: note: (if you use ‘-fpermissive’ G++ will accept your code)

Итак, -продолжительный путь. [ПРАВИТЬ: Теперь я вижу, что вы добавили, что вы уже нашли это]

Иначе, поскольку вы упомянули, что источники генерируются автоматически, вы можете добавить шаг постобработки. Например, используя sed

sed -i 's,<::,< ::,g' filename.cpp

или что-то подобное, например, питон. Но только если вы уверены, что никогда не используете <:: для чего-то другого. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...