Последнее изменение синтаксиса Lambda или ошибка gcc?

Я использую svn-версию gcc-4.7.0 , чтобы проверить некоторые функции C ++ 11, например Лямбда-выражения. Через пару недель некоторые из моих старых примеров, включая Lambdas, больше не компилируются. Интересно:

  • Пропустил ли я последнее изменение в спецификации C ++ 11-Lambda, которое было реализовано в gcc-4.7.0 за последние недели?
  • Это ошибка в gcc? больше не распознает встроенные лямбда-выражения?
  • Или я неправильно понял что-то еще, связанное с лямбда-синтаксисом?

Проблемный код, похоже, включает встроенные лямбда-выражения, которые предоставляются напрямую в качестве аргументов.

Вы бы сказали, что следующий код является правильным кодом C ++ 11?

#include 
using namespace std;

struct Image {}; // dummy

void fill(int color, const Image& image) {
} // dummy

int main() {
    int red;
    Image img;
    thread th{
        [&img](int c){ fill(c, img); },  // error?
      red };
    th.join();
}

Если я изменю его и сначала назначу лямбду переменной, он сработает:

#include 
using namespace std;

struct Image {}; // dummy
void fill(int color, const Image& image) {
} // dummy

int main() {
    int red;
    Image img;
    auto f = [&img](int c){ fill(c, img); }; // lambda
    thread th{ f, red };                     // ok now
    th.join();
}

Я поместил пример сюда где оба компилируются с gcc-4.5 (за исключением того, что вызывает исключение, вероятно, потому, что -pthread не связан). Но как я уже сказал: в моем gcc-4.7.0-svn первый вариант перестал компилироваться пару недель назад.

Обновление Сообщение об ошибке похоже на ошибку синтаксического анализа:

In function 'int main()':
...:30:11: error: expected '=' before '(' token
...:30:12: error: expected primary-expression before 'int'
...:30:12: error: expected ')' before 'int'
...:30:36: error: no matching function for call to 
           'std::thread::thread()'
...:30:36: note: candidates are:
           ...

8
задан Nicol Bolas 10 November 2011 в 18:25
поделиться