Dear all,<br><br>  The type of LDBL_MIN, LDBL_MAX, LDBL_DENORM, and LDBL_EPSILO<br>are not always equal to "long double" on every architecture (ARM or MIPS). <br>This will cause some problem in overloaded method resolution and template<br>
instantiation.<br><br>For example, here's a piece of simplified code from STLport:<br><span style="font-family:courier new,monospace"><br>template <class _Tp><br>static complex<_Tp> tanT(const complex<_Tp>& z, const _Tp& Tp_limit) { ... }<br>
<br>complex<long double> tan(const complex<long double>& z)<br>{ return tanT(z, <b>::log(LDBL_MAX)</b>); }</span><br><br>  Since LDBL_MAX is defined as a double-typed literal, the compiler will<br>choose <b>double ::log(double)</b> in the overloaded method resolution.  Then,<br>
we will call tanT(const complex<<b>long double</b>>&, <b>double</b>),<br>which is undefined (or precisely, bailed the template instantiation).<br><br>  Although the C/C++ standards do not specified the type of the LDBL_*,<br>
however I believe we should define them as long double, regardless the target<br>implementation for long double.  This is also the behaviour documented in<br>the <a href="http://www.gnu.org/software/libc/manual/html_mono/libc.html#Floating-Point-Parameters">glibc document</a>.<br>
<br>  I hope the attached patch can fix this issue.  Please have a look.  Thanks.<br><br>Sincerely,<br>Logan<br>