У меня есть класс с параметром конструктора 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.