Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
4.1.2, 4.1.3, 4.1.4, 4.2.0, 4.2.1
-
None
-
EDG eccp/Solaris
-
Compiler Error
Description
C++ adds float and long double overloads of all the C math functions in <cmath> (and the C++ version of <math.h>). Our strict implementation of <cmath> is missing all of them:
$ cat t.cpp && make t && ./t
#include <cmath>
extern "C" {
typedef float cfunf_t (float);
typedef long double cfunl_t (long double);
int printf (const char*, ...);
}
typedef float cxxfunf_t (float);
typedef long double cxxfunl_t (long double);
int testf (...)
{ return 0; }int testf (cfunf_t*) { return 1; }
int testf (cxxfunf_t*) { return 2; }
int testl (...) { return 0; }
int testl (cfunl_t*)
{ return 1; }int testl (cxxfunl_t*)
{ return 2; }extern "C" int printf (const char*, ...);
int main ()
{
#define TESTF(fun) \
if (!testf (std::fun)) printf ("std::%s(float) not declared\n", #fun);
TESTF (acos);
TESTF (asin);
TESTF (atan);
TESTF (cos);
TESTF (sin);
TESTF (tan);
TESTF (cosh);
TESTF (sinh);
TESTF (tanh);
TESTF (exp);
TESTF (log);
TESTF (log10);
TESTF (sqrt);
TESTF (ceil);
TESTF (fabs);
TESTF (floor);
#define TESTL(fun) \
if (!testl (std::fun)) printf ("std::%s(long double) not declared\n", #fun);
TESTL (acos);
TESTL (asin);
TESTL (atan);
TESTL (cos);
TESTL (sin);
TESTL (tan);
TESTL (cosh);
TESTL (sinh);
TESTL (tanh);
TESTL (exp);
TESTL (log);
TESTL (log10);
TESTL (sqrt);
TESTL (ceil);
TESTL (fabs);
TESTL (floor);
}
eccp -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/eccp-3.8-11s/include -I/build/sebor/dev/stdlib/include/ansi -I/build/sebor/PlumHall/lvs06a/conform -I/build/sebor/PlumHall/lvs06a/dst.3 -A -x --template_directory=/build/sebor/eccp-3.8-11s/lib -g --display_error_number --remarks --diag_suppress 193,236,340,401,261,479,487,678,679,815 --diag_suppress 177,381,191,68,550,611,997,549 t.cpp
eccp t.o -o t --template_directory=/build/sebor/eccp-3.8-11s/lib -L/build/sebor/eccp-3.8-11s/lib -lstd11s -lm
std::acos(float) not declared
std::asin(float) not declared
std::atan(float) not declared
std::cos(float) not declared
std::sin(float) not declared
std::tan(float) not declared
std::cosh(float) not declared
std::sinh(float) not declared
std::tanh(float) not declared
std::exp(float) not declared
std::log(float) not declared
std::log10(float) not declared
std::sqrt(float) not declared
std::ceil(float) not declared
std::fabs(float) not declared
std::floor(float) not declared
std::acos(long double) not declared
std::asin(long double) not declared
std::atan(long double) not declared
std::cos(long double) not declared
std::sin(long double) not declared
std::tan(long double) not declared
std::cosh(long double) not declared
std::sinh(long double) not declared
std::tanh(long double) not declared
std::exp(long double) not declared
std::log(long double) not declared
std::log10(long double) not declared
std::sqrt(long double) not declared
std::ceil(long double) not declared
std::fabs(long double) not declared
std::floor(long double) not declared