Лямбда-выражение компилируется на платформе 64, но вызывает ошибку компиляции на платформе 32.

У меня есть простое лямбда-выражение:

EnumWindows([] (HWND hWnd, LPARAM lparam) -> BOOL {return FALSE;}, 0);

Он успешно скомпилирован на 64-битной платформе, но вызывает следующую ошибку на 32-битной:

[CLANG Error] Unit3.cpp(15): no matching function for call to 'EnumWindows'
  winuser.h(9766): candidate function not viable: no known conversion from '<lambda at Unit3.cpp:15:14>' to 'WNDENUMPROC' (aka 'BOOL (*)(HWND, LPARAM) __attribute__((stdcall))') for 1st argument

У кого-нибудь есть идея?


person mh taqia    schedule 18.09.2015    source источник
comment
Это выглядит уместно stackoverflow .com/questions/17714175/   -  person jcoder    schedule 18.09.2015
comment
Я видел это, не было полезно. Кажется, это работает на 64-битной компиляции.   -  person mh taqia    schedule 18.09.2015
comment
@jcoder: этот другой вопрос касается Visual Studio, а не C++Builder.   -  person Remy Lebeau    schedule 18.09.2015
comment
Вам нужно квалифицировать лямбду как __stdcall. 64-битная версия имеет только одно соглашение о вызовах, так что это не проблема. Вам нужно проверить, есть ли у вашего компилятора специальный синтаксис для этого.   -  person sbabbi    schedule 18.09.2015
comment
@sbabbi: как квалифицировать лямбду как __stdcall?   -  person mh taqia    schedule 18.09.2015
comment
@mhtaqia stackoverflow.com/questions /14169295/   -  person sbabbi    schedule 18.09.2015
comment
@sbabbi: не получается. Ошибка компиляции.   -  person mh taqia    schedule 18.09.2015
comment
@mhtaqia Тогда, я думаю, тебе не повезло.   -  person sbabbi    schedule 18.09.2015