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

Невозможно использовать lambda в списке инициализации шаблона в С++

У меня есть класс с параметром конструктора std:: function.

class ClazzA{
public:
    ClazzA(function<void()> foo){}
    ClazzA(){
        ClazzA([](){});
    }
};

Если у меня есть экземпляр этого класса как член другого, я должен вызвать конструктор в списке инициализаторов. Я могу передать лямбду в качестве аргумента, и она автоматически преобразуется:

class ClazzB{
public:
    ClazzA a;
    ClazzB() :
      // works fine:
      a([](){}){}
};

Но если ClazzB является шаблоном, лямбда не работает:

template<typename T> class ClazzC{
public:
    ClazzA a;
    //works fine:
    ClazzC(function<void()> foo) : a(foo){}
    //doesn't work:
    ClazzC() :
      //syntax error : ')'
      a([](){})
      //syntax error : '{'
      //unexpected token(s) preceding '{'; skipping apparent function body
      {}
};

Компилятор - это MSVС++ 2010. Я не понимаю, что я делаю неправильно или почему этот синтаксис не поддерживается.

Сначала ClazzA тоже был шаблоном, и функция была немного сложнее, поэтому я подумал, что это проблема с шаблоном лямбда или чем-то еще. Но после удаления всего этого кода проблема остается.

UPD: Пробовал компилировать в MinGW g++, он работает. Похоже на проблему с Visual Studio.

4b9b3361

Ответ 1

Это проблема с реализацией MSVS С++ 0x (см. комментарии под вопросом). Проблема решена.