定义_HAS_TRADITIONAL_STL以启用STL功能是否安全?

时间:2010-03-24 00:13:50

标签: c++ windows visual-studio-2008 stl winapi

在VS2008项目中尝试使用std::select1st中的<functional>时,我发现它是由_HAS_TRADITIONAL_STL后卫设置的。{/ p>

  • 这是否有原因?

  • 在包含_HAS_TRADITIONAL_STL之前简单定义<functional>是否安全?

1 个答案:

答案 0 :(得分:7)

默认情况下std::select1st不存在的原因是它不是C ++标准库的一部分。它是标准模板库(STL)的一部分,未被C ++标准采用。

我在_HAS_TRADITIONAL_STL的MSDN上找不到任何文档,并且它似乎没有在随Visual Studio 2010一起发布的标准库版本中使用。它可能包含在Dinkumware的库中当他们将它交付给微软时。

据说,如果你想使用std::select1st,那么可能是安全的。请注意,使用该标志启用的任何内容都是特定于实现和不可移植的(甚至可能在Visual C ++版本之间更改)。您可能最好实现自己的select1st函数:

template <typename PairT>
struct select1st : public std::unary_function<PairT, typename PairT::first_type>
{
    typename PairT::first_type operator()(const PairT& a) { return a.first; }
};