Подтвердить что ты не робот

Является ли _1 частью С++ 0x?

Я видел два последние ответы, используя _1 как чистое решение С++ 0x (нет явного упоминания о повышении лямбда).

Есть ли такое животное, как std::_1, я думаю, что наличие родных лямбда сделает такую ​​конструкцию избыточной.

Поиск кода Google для std::_1 приносит два результата из того же проекта, что и неубедительно.

4b9b3361

Ответ 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.