У нас есть некоторый код, использующий класс 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?