Причина std::select1st
по умолчанию отсутствует в том, что она не является частью стандартной библиотеки C ++. Это одна из частей Стандартной библиотеки шаблонов (STL), которая не была принята в стандарт C ++.
Я не могу найти документацию по MSDN для _HAS_TRADITIONAL_STL
, и она, похоже, не используется в версии стандартной библиотеки, поставляемой с Visual Studio 2010. Возможно, она включена в библиотеку Dinkumware, когда они доставьте его в Microsoft.
Как уже было сказано, вероятно безопасно определить, если вы хотите использовать 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; }
};