Я пытаюсь сделать свою компиляцию проекта под GCC (Visual Studio компилирует его безупречно).
У меня есть пользовательское, утверждают функцию, которая бросает сообщение wstring. Часть его _ _FUNCTION __ макрос, который я "unicodize" использование РАСШИРИТЬ макроса из MSDN
#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
Это компилирует хорошо в MSVC, но это печатает это в GCC:
error: ‘L__FUNCTION__’ was not declared in this scope
Единственное решение, с которым я мог идти, состоит в том, чтобы преобразовать содержание __ ФУНКЦИЯ __ к wstring на времени выполнения с помощью mbstowcs, но я хотел бы найти время компиляции способом сделать это.
Спасибо за справку.
В GCC __ FUNCTION __
является нестандартным расширением. Цитата: GCC Online Docs
В GCC 3.3 и ранее, только в C,
__ FUNCTION __
и__ PRETTY_FUNCTION __
обрабатывались как строковые литералы; их можно использовать для инициализации массивов char , и они могут быть объединены с другими строковыми литералами. GCC 3.4 и более поздние версии обрабатывают их как переменные, как__ func __
. В C ++__ FUNCTION __
и__ PRETTY_FUNCTION __
всегда были переменными.
Таким образом, добавление L перед __ FUNCTION __
просто превратит его в L__FUNCTION __
, который, вероятно, не определен.