定义_HAS_TRADITIONAL_STL来启用STLfunction是否安全?

在试图在VS2008项目的<functional>中使用std::select1st ,我发现它是由_HAS_TRADITIONAL_STL守护进行的。

  • 是否有一个原因?

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

std::select1st默认不存在的原因是它不是C ++标准库的一部分。 它是标准模板库(STL)的一部分,没有被采用到C ++标准中。

我在MSDN上找不到任何关于_HAS_TRADITIONAL_STL文档,而且似乎也没有在随Visual Studio 2010发布的标准库的版本中使用_HAS_TRADITIONAL_STL将它提供给Microsoft时可能会将其包含在库中。

std::select1st ,定义是否要使用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; } };