std :: _ USE未定义

时间:2018-06-01 06:16:43

标签: c++ visual-c++ std

我们在2005年1月的一个版本中使用了类CStdString,它是std :: string的包装器。

此类使用宏SS_USE_FACET将函数std :: use_facet封装为Microsoft C ++的特殊实现。对于Microsoft编译器,它使用备用宏_USE。

我们现在收到一个错误,“_USE不是std的成员”。

如果我在这个宏中注释掉微软的特定情况,它编译得很好。这是宏定义,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 :(得分:1)

您的解决方案(注释掉MS特定行并退回到标准std::use_facet<fac>(loc))是正确的。

这已由Microsoft工程师在this page底部确认:

  

是的,此非标准宏已被有意删除。

     

[...]

     

您应将此类调用替换为std :: use_facet(loc)