2012-04-20 3 views
1

У меня проблема с lambdas в MSVC2010.C++ 0x lambda + boost :: function problem

Он успешно компилируется:

auto f1 = []() { }; 
boost::function<void()> a = f1; 

Но это приносит C2440 ошибки:

auto f2 = []() 
{ 
    auto f3 = []() { }; 
    boost::function<void()> b = f3; 
}; 

Ошибка C2440:

'initializing' : cannot convert from 'int' to 'boost::function<Signature>' 
    with 
    [ 
     Signature=void (void) 
    ] 
    No constructor could take the source type, or constructor overload resolution was ambiguous 

Почему? Работает ли он в GCC4.6?

+2

Почему вы используете функцию boost :: вместо std :: function? –

+0

Поскольку зависимые библиотеки моего проекта используют boost :: function. Работает ли он с std :: function? – dizel3d

+0

Я протестировал ваш код с помощью vc10, но вместо этого использовал 'std :: function'. Он прекрасно компилируется. Итак, код с clang 3.2 и gcc 4.6.2. У меня нет загрузочных библиотек, поэтому я не могу комментировать вашу точную проблему. НТН! – dirkgently

ответ

0

Возможно, ошибка в MSVC (сообщение об ошибке кажется очень подозрительным). Он работает в GCC 4.7.

+0

decltype (f3) в порядке. это не «int», это «lambda0». – dizel3d

Смежные вопросы