std :: _ USE не определено - PullRequest
0 голосов
/ 01 июня 2018

У нас есть некоторый код, использующий класс CStdString, который является оберткой для std :: string, в версии от января 2005 года.

Этот класс использует макрос SS_USE_FACET для инкапсуляции функции std :: use_facet сспециальная реализация для Microsoft C ++.Для компилятора Microsoft он использует альтернативный макрос _USE.

Теперь мы получаем сообщение об ошибке: «_USE не является членом std».

Если я закомментирую конкретный случай Microsoft вэтот макрос, он прекрасно компилируется.Это определение макроса с закомментированной версией Microsoft.

#if defined(__SGI_STL_PORT) && (__SGI_STL_PORT >= 0x400 )

    #if defined(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS) && defined(_MSC_VER)
        #ifdef SS_ANSI
            #pragma schMSG(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS defined!!)
        #endif
    #endif
    #define SS_USE_FACET(loc, fac) std::use_facet<fac >(loc)

//#elif defined(_MSC_VER )

//  #define SS_USE_FACET(loc, fac) std::_USE(loc, fac)

// ...and
#elif defined(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE)

      #define SS_USE_FACET(loc, fac) std::use_facet(loc, (fac*)0)

#else

    #define SS_USE_FACET(loc, fac) std::use_facet<fac >(loc)

#endif

Это нормально?

Можно ли предположить, что Microsoft приняла стандартную реализацию и, наконец, удалила специальный макрос _USE?

1 Ответ

0 голосов
/ 24 сентября 2018

Ваше решение (комментирование строк MS и возврат к стандарту std::use_facet<fac>(loc)) является правильным.

Это подтверждается инженером Microsoft в нижней части этой страницы :

Да, этот нестандартный макрос был намеренно удален.

[...]

Такие вызовы следует заменить на std :: use_facet (loc)

...