Development Reference Guides



Changes the default size of the long double data type.


The default size of the long double data type is 64 bits.
This option changes the default size of the long double data type to 80 bits.
However, the alignment requirement of the data type is 16 bytes, and its size must be a multiple of its alignment, so the size of a long double on Windows* is also 16 bytes. Only the lower 10 bytes (80 bits) of the 16 byte space will have valid data stored in it.
Using the
command-line option on Windows* platforms requires that any source code using
double extended precision
floating-point types (FP80) be carefully segregated from source code that was not written in a way that considers or supports their use. When this option is used, source code that makes assumptions or has requirements on the size or layout of an FP80 value may experience a variety of failures at compile time, link time, or run time.
The Microsoft* C Standard Library and Microsoft* C++ Standard Template Library do
support FP80 datatypes. In all circumstances where you want to use this option, please check with your library vendor to determine whether they support FP80 datatype formats.
For example, the Microsoft* compiler and Microsoft*-provided library routines (such as
long double
math functions) do
provide support for 80-bit floating-point values and should not be called from code compiled with the
command-line option.
Starting with the Microsoft Visual Studio 2019 version 16.10 release, you may get compilation errors when using options /std:c++latest together with /Qlong-double in programs that directly or indirectly include the <complex> header, <xutility> header, or the <cmath> header. To see an example of this, see the Example section below.
IDE Equivalent
Alternate Options
In the Note above, we mention an issue with using the options /std:c++latest together with /Qlong-double in programs that directly or indirectly include the <complex>, <xutility>, or the <cmath> headers. The following shows an example of this issue:
#include <iostream> #include <complex> int main() {long double ld2 = 1256789.98765432106L;int iNan = isnan(ld2);std::cout << "Hello World!\n"; } ksh-3.2$ icl -c -EHsc -GR -std:c++latest /Qlong-double /MD test1.cpp Intel(R) C++ Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version xxx Build xxxx Copyright (C) 1985-2021 Intel Corporation. All rights reserved. test1.cpp c:/Program files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.29.30130/include/xutility(5918): error: no instance of function template "std::_Bit_cast" matches the argument list argument types are: (const long double) const auto _Bits = _Bit_cast<_Uint_type>(_Xx); ^ c:/Program files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.29.30130/include/xutility(67): note: this candidate was rejected because at least one template argument could not be deduced _NODISCARD _CONSTEXPR_BIT_CAST _To _Bit_cast(const _From& _Val) noexcept { ^ detected during: instantiation of "auto std::_Float_abs_bits(const _Ty &) [with _Ty=long double, <unnamed>=0]" at line 5967 instantiation of "bool std::_Is_finite(_Ty) [with _Ty=long double, <unnamed>=0]" at line 1307 of "c:/Program files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.29.30130/include/cmath" instantiation of "_Ty std::_Common_lerp(_Ty, _Ty, _Ty) noexcept [with _Ty=long double]" at line 1392 of "c:/Program files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.29.30130/include/cmath" compilation aborted for test1.cpp (code 2)

Product and Performance Information


Performance varies by use, configuration and other factors. Learn more at