2013-04-10 3 views
3

Несколько недель назад I posted this question о странном сообщении об ошибке. Преступником был неправильный разбор маркера <, проблема была решена с помощью ключевого слова «шаблон» для устранения неоднозначности."шаблонный" disambiguator - C++ 11. Любой шанс для VS2008 компилятора?

Мы обнаружили неожиданный уродливый сюрприз. Шаблоном disambiguator является C++ 11, но нам нужно поддерживать VS2008, и он не поддерживает его. Таким образом, мы в основном перешли от чего-то, что компилируется на windows, но не на linux, на то, что компилируется на linux, но не на windows.

Есть ли у вас какие-либо идеи, как их решить? В частности

  • есть волшебный вариант в компиляторе окна, чтобы включить этот C++ 11 конструкта или
  • есть альтернативный путь в пределах старого с стандартом ++, чтобы решить эту неоднозначность, которая также кросс-компилятор, или
  • , если нам нужно использовать препроцессор, какие константы препроцессора (если таковые имеются), чтобы отличить два компиляторов (GCC является другой один)
+0

'. template' не является конструкцией C++ 11. – Yuushi

+0

'.template' to disambiguate не относится к C++ 11. см. http://www.cplusplus.com/forum/general/194/ и http://womble.decadent.org.uk/c++/template-faq.html раздел 6, – mark

+0

Без кода и сообщения об ошибке это невозможно сказать, в чем проблема. – mark

ответ

8

поскольку C++ 98 шаблон disabiguator является частью C++. Он был введен, когда был введен двухфазный поиск, а также typename.

+0

Конечно, Visual Studio должна была бы * поддерживать * двухфазный поиск для этого вопроса ... –

+0

Почему он не распознается компилятором VS2008? –

+0

@NicolBolas Конечно. Много плакатов здесь предлагают решения C++ 11 время от времени, но многие пользователи застряли в VC++, что, возможно, по-прежнему не поддерживает C++ 98, а тем более ничего нового. Я твердо сказал себе, что если вы используете VC++, вы не можете использовать ничего нового, чем ARM (еще не стандартная версия C++ 1990). –

Смежные вопросы