1
mingw 5.3.0を使用してコンパイルすると、Win32 API呼び出しの関数ポインタとしてラムダを指定しようとすると、Visual Studio 2013のMSVCを使用すると問題なくコンパイルできます。mingw:ラムダから関数ポインタへの無効な変換
MCVE:
#include <Windows.h>
int main(int argc, char *argv[])
{
bool parameterData;
EnumWindows([](HWND windowHandle, LPARAM parameter) -> BOOL {
return 1;
}, reinterpret_cast<LPARAM>(¶meterData));
}
GCCは、私の周り私の頭をラップすることはできません、次のエラーメッセージ、スロー:
error: invalid user-defined conversion from 'main(int, char**)::<lambda(HWND, LPARAM)>' to 'WNDENUMPROC {aka int (__attribute__((__stdcall__)) *)(HWND__*, long int)}' [-fpermissive]
}, reinterpret_cast<LPARAM>(¶meterData));
^
note: candidate is: main(int, char**)::<lambda(HWND, LPARAM)>::operator BOOL (*)(HWND, LPARAM)() const <near match>
EnumWindows([](HWND windowHandle, LPARAM parameter) -> BOOL {
^
note: no known conversion from 'BOOL (*)(HWND, LPARAM) {aka int (*)(HWND__*, long int)}' to 'WNDENUMPROC {aka int (__attribute__((__stdcall__)) *)(HWND__*, long int)}'
In file included from C:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/Windows.h:72:0,
from main.cpp:1:
note: initializing argument 1 of 'WINBOOL EnumWindows(WNDENUMPROC, LPARAM)'
WINUSERAPI WINBOOL WINAPI EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);
をそれはGCCが好きではないことを、正確には何ですか? EnumWindows
の最初のパラメータとしてラムダを使用するためには、何を変更する必要がありますか?
問題はステートレスラムダの変換のようです...あなたはそれをサポートコンパイラのでしょうか? – Rodrigo