Sprawdziłem kilka kompilatorów: GCC DJGPP, GCC MinGW, MSVC++, OpenWatcom, Embarcadero C++ i problem jest tylko pod MinGW-em.
Prawdopodobnie dlatego, że MinGW używa msvcrt.dll
jako biblioteki standardowej C (jest to biblioteka której używa sam Windows, ale MS nie zaleca używania jej we własnych programach).
I tu mamy problem, bo long double
dla GCC to liczba 96-bitowa (sizeof wynosi 12), a dla MSVC++ (którym na pewno skompilowano msvcrt.dll) long double
to to samo co double
(sizeof = 8).
Zatem błąd jest po stronie MinGW-a, konkretnie w kwestii użycia systemowego msvcrt.dll mimo niezgodności typu.