Можно ли использовать лямбду в списке инициализации класса?

Я пытаюсь использовать C++11 Lambda для инициализации constпеременной-члена класса.

Сильно упрощенный пример:

class Foo
{
public:
    const int n_;
    Foo();
};

Foo::Foo()
:   n_( []() -> int { return 42; } )
{
}

int main()
{
    Foo f;
}

В MSVC10 это дает:

error C2440: 'initializing' : cannot convert from '`anonymous-namespace'::' to 'const int'

В IDEONEэто дает:

prog.cpp: In constructor 'Foo::Foo()':
prog.cpp:9:34: error: invalid conversion from 'int (*)()' to 'int'

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

​​Могу ли я? Если да, то каков правильный синтаксис?

9
задан John Dibling 14 June 2012 в 16:42
поделиться