Является ли _1 частью С++ 0x?
Я видел два последние ответы, используя _1
как чистое решение С++ 0x (нет явного упоминания о повышении лямбда).
Есть ли такое животное, как std::_1
, я думаю, что наличие родных лямбда сделает такую конструкцию избыточной.
Поиск кода Google для std::_1
приносит два результата из того же проекта, что и неубедительно.
Ответы
Ответ 1
Да, они являются частью С++ 0x внутри пространства имен std::placeholders
, начиная с последнего черновика (n3126) §20.8.10.1.3 "Заполнители":
namespace std {
namespace placeholders {
// M is the implementation-defined number of placeholders
extern unspecified _1;
extern unspecified _2;
.
.
.
extern unspecified _M;
}
}
На самом деле они включены в TR1 (n1836 §3.6.4; n1455) вместе с bind
, которые взяты из Библиотека Boost.Bind.
Ответ 2
По-видимому, они являются частью С++ 0x и должны быть определены в заголовке <functional>
в соответствующем компиляторе, см. следующий FAQ:
С++ 0x FAQ
Ответ 3
Да, они являются частью С++ 0x. Я не дважды проверял спецификации TR1, но я подозреваю, что они были добавлены там (TR1 был по существу единственным расширением библиотеки для С++ 03, поэтому он не мог полагаться на lambdas), а затем, поскольку он уже существует в TR1, было бы бесполезно разрушить его снова в С++ 0x, даже если это уже не нужно, как только у вас есть истинные lambdas.