TBCI Numerical high perf. C++ Library  2.8.0
Macros
config_manual.h File Reference

switchbox to set all sorts of HAVE_xxx settings used by basics.h. More...

#include <features.h>
#include <unistd.h>
Include dependency graph for config_manual.h:

Go to the source code of this file.

Macros

#define HAVE_SIGNATURE   1
 Normally, we don't undefine our HAVE settings, as the user might know better and e.g. More...
 
#define HAVE___RESTRICT__   1
 
#define HAVE_BUILTIN_CPLX   1
 
#define HAVE_ALIGN_ATTR   1
 
#define HAVE_WEAK_ATTR   1
 
#define HAVE_UNUSED_ATTR   1
 
#define HAVE_CONST_ATTR   1
 
#define HAVE_REGPARM_ATTR   1
 
#define HAVE_PRAGMA_IFACE_IMPL   1
 
#define __GNUC_PATCHLEVEL__   0
 
#define HAVE_PRETTY_FUNCTION   __GNUC__
 
#define HAVE_UNISTD_H   1
 
#define HAVE_LONG_LONG   1
 
#define HAVE_LONG_DOUBLE   1
 
#define HAVE_NEED_FOR_GD   1
 
#define HAVE_NEED_FOR_EXPL_TMPLPARM   1
 
#define HAVE_MALLOC_ATTR   1
 
#define HAVE_MISS_STDCPLX_FANCY_FN_BUG   1
 
#define HAVE_MISS_STDCPLX_LOG10_BUG   1
 
#define HAVE_MISS_STDCPLX_TAN_BUG   1
 
#define HAVE_IGNORE_STD_NS_BUG   1
 
#define HAVE_GCC_MINMAX   1
 
#define HAVE_NAMED_RETVAL   1
 
#define HAVE_FUNC   2
 
#define __func__   __FUNCTION__
 
#define HAVE_ERRNO   1
 
#define HAVE_PTHREADS   1
 
#define HAVE_MEMALIGN   2
 
#define HAVE_MALLOC_H   1
 
#define HAVE_MALLINFO   1
 
#define HAVE_SIGNALS   1
 
#define HAVE_ERRNO   1
 
#define HAVE_SYS_SYSINFO_H   1
 
#define HAVE_GET_NPROCS   1
 
#define HAVE_GETLOADAVG   1
 
#define HAVE_STRSIGNAL   1
 

Detailed Description

switchbox to set all sorts of HAVE_xxx settings used by basics.h.

KG, 2001-06-14.

Id:
config_manual.h,v 1.1.2.79 2019/05/28 21:19:03 garloff Exp

We store knowledge about compiler features/bugs here. We have the tests for this in our configure.in file and tests for all those features/bugs are normally done by our autoconf tests. This file is still there for compatibility, so TBCI can be used without autoconf. This capability is deprecated and will be dropped in the future.

  1. BUGS:
    • HAVE_PROMOTION_BUG: Compiler barfs on something like template <typename u>=""> explicit test (const test<U>& t); in the class decl of template <typename t>=""> class test.
    • HAVE_LIBC_GLOBAL_NS_BUG: Most (all?) libc functions should be exported to C++ in namespace std:: However, some compilers only have these available in the global namespace.
    • HAVE_CPP_GLOBAL_NS_BUG: The symbols from the C++ standard should be in the std:: namespace. Some compilers also fail for these.
    • HAVE_CPLX_GLOBAL_NS_BUG: The symbols from complex<> class should be in the std:: namespace. DEC CXX does do this correctly while failing for normal C++ stuff.
    • HAVE_FRIEND_GLOBAL_NS_BUG: Some compilers think that friend decls are in the global namespace not the current one unless told otherwise. This is triggered when a using namespace decl has been used on MIPSpro 7.3x.
    • HAVE_BUGGY_NAMESPACE: Namespace handling is completely broken, so we should do without.
    • HAVE_BUGGY_EXCEPTIONS: Exception handling should be disabled, because it's too buggy on this compiler.
    • HAVE_FOR_SCOPING_BUG: Some compilers (still!) don't get the new for scoping right :-(
    • HAVE_NO_NEW_HEADERS_BUG: Instead of including <math.h> and <iostream.h> the new names <cmath> and <iostream> should be used.
    • HAVE_GCC295_FRIEND_BUG: gcc-2.95 barfs on templated friends that have the same name as member functions. Some other compilers do the same.
    • HAVE_GCC295_TMPLFRNDCLS_BUG: gcc-2.95 barfs on template <typename u>=""> friend class test<U>; inside the decl of test<T> inside a namespace.
    • HAVE_GCC296_TMPLVARARG_BUG: Some gcc-2.96 snapshots barfed on templated varargs.
    • HAVE_GCC300_CMATH_POWER_BUG: The libstdc++ in gcc-3.0.0 misses std::__cmath_power<double>(double, unsigned); which bites you in case you use -fno-implicit-templates.
    • HAVE_GCC320_MISS_CPLXFN_BUG: The libstdc++ in gcc-3.2.0 misses std::complex contructor and mathematical functions which bites you when using -fno-implicit-templates.
    • HAVE_GCC34_LIBSTDCXX_REAL_IMAG_REF: When instantiating the templates for T real(const std::complex&), gcc-3.2/3.3 return a value, whereas gcc-3.4 has two prototypes, one returning a const ref, one returning a ref (and obviously the arg is not const then either).
    • HAVE_MISS_STDCPLX_FANCY_FN_BUG: We miss some fancy functions for the std::complex<> types such as acos, asin, tan, atan.
    • HAVE_MISS_STDCPLX_LOG10_BUG: We miss the log10 function for the std::complex<> type.
    • HAVE_MISS_STDCPLX_TAN_BUG: We miss the tan() and tanh() functions for the std::complex<> type.
    • HAVE_MISS_CPLX_IO_BUG: Iostream support is missing for std::complex<>.
    • HAVE_IGNORE_STD_NS_BUG: egcs/gcc-2.9x do support the std:: namespace, but ignore it.
    • HAVE_MISS_CSTD_ABS_BUG: icc-5.01 does not define abs(float)/abs(double) in std:: namespace
    • HAVE_BCXX_INHER_BREAKS_FRIEND_BUG: Friends of a class may not access protected base class members despite public inheritance
    • HAVE_BCXX_TEMPL_INLINE_MFUNC_BUG: When instantiating templates, the template parameters are undefined declarators in inline member fns
    • HAVE_BCXX_TYPENAME_BUG: typename class::def (var) syntax is not understood
  2. C Library FEATURES:
    • HAVE_UNISTD_H: unistd.h header exists
    • HAVE_MEMALIGN: Support for memalign() function
    • HAVE_MALLINFO: Memory allocation statistics with mallinfo()
    • HAVE_FPUCW: glibc-2.0 fpucw() support
    • HAVE_NEW_FPUCTRL: glibc-2.1 and newer FPU control
    • HAVE_FENV: glibc-2.2 FPU stuff
    • HAVE_SIGNALS: Support for signal handling
    • HAVE_STRSIGNAL: have strsignal()
    • HAVE_ERRNO: errno exists
    • HAVE_PTHREADS: Support for POSIX threads
    • HAVE_MINMAX_IN_SYS_PARAM_H: SVR4 systems provide MIN/MAX macros there.
    • HAVE_SYS_SYSINFO_H: sys/sysinfo.h header presence
    • HAVE_GET_NPROCS: get_nprocs() returns the no of online CPUs
    • HAVE_GETLOADAVG: getloadavg() returns the avg load
    • HAVE_SCHED_GETAFFINITY: sched_getaffinity() exists
    • HAVE_PTHREAD_GETAFFINITY_NP: pthread_getaffinity_np() exists
    • HAVE_PTHREAD_SPINLOCK: phtread_spin_lock() exists
    • HAVE_CLOCK_GETTIME: clock_gettime() exists
    • HAVE_CPU_COUNT: CPU_COUNT() works
  3. C++ library FEATURES:
    • HAVE_LIMITS: numeric_limits class
    • HAVE_SSTREAM: New <sstream> present (replaces strstream)
    • HAVE_STD_MINMAX: std::min(),max() present
  4. General compiler features
    • HAVE_LONG_LONG: Support for the long long integer type (64bit on 32bit archs)
    • HAVE_LONG_DOUBLE: Support for an extended precision floating point type (e.g. 80bit on ix86)
    • HAVE_NEED_FOR_GD: gcc needs guiding declarations in order to resolve an ambiguity WRT the template params of friends.
    • HAVE_NEED_FOR_EXPL_TMPLPARM: gcc needs explicit specification of the template params via <> or <T,...> for friends.
    • HAVE_RESTRICT/HAVE___RESTRICT__: Support for the (C99) restrict or restrict keyword.
    • HAVE_TWOSTAGE_LOOKUP: We can't access data members from templated base classes without explcit qualifier (gcc-3.4+).
    • HAVE_NEED_FOR_FRIEND_SCOPE: Probably correct consequence of Koenig lookup: We need to explcitly scope friends that have same name as a member function to avoid shadowing.
    • HAVE_TLS: Thread local storage is suported via __thread.
    • HAVE_DTLS: Thread local storage is suported via __declspec(thread).
  5. GCC features
    • HAVE_BUILTIN_CPLX: gcc builtin complex type
    • HAVE_SIGNATURE: gcc signature keyword
    • HAVE_ALIGN_ATTR: gcc aligned() attribute
    • HAVE_NEW_ALIGN_ATTR: gcc-3.4 syntax for aligned() attribute
    • HAVE_TEMPL_ALIGN_ATTR: Support aligned() attribute for dep types in templates
    • HAVE_DECLSPEC_ALIGN: The intel compiler variant of align
    • HAVE_WEAK_ATTR: gcc weak attribute
    • HAVE_CONST_ATTR: gcc const attribute (should not be needed)
    • HAVE_REGPARM_ATTR: gcc regparm() attribute
    • HAVE_VISIBILITY_ATTR: gcc visibility() attribute
    • HAVE_MALLOC_ATTR: gcc malloc attribute
    • HAVE_UNUSED_ATTR: gcc unused attribute
    • HAVE_HOT_ATTR: gcc hot/cold attributes
    • HAVE_GCC_MINMAX: Support for the a>?b and a<?b operators which replace a>b?a:b constructs, but are free from side effects
    • HAVE_NAMED_RETVAL: Support gcc named return values
    • HAVE_PRAGMA_IFACE_IMPL: support for gcc #pragma interface/implementation
    • HAVE_BUILTIN_EXPECT: Give the compiler a hint whether a branch will be taken or not
    • HAVE_BUILTIN_PREFETCH: Use prefetch instructions to warm the caches before data is accessed.
    • HAVE_PRETTY_FUNCTION: The literal/variable PRETTY_FUNCTION is defined.
    • HAVE_FUNC: The literal/variable func is defined.

Definition in file config_manual.h.

Macro Definition Documentation

#define __func__   __FUNCTION__

Definition at line 492 of file config_manual.h.

#define __GNUC_PATCHLEVEL__   0

Definition at line 344 of file config_manual.h.

#define HAVE___RESTRICT__   1

Definition at line 332 of file config_manual.h.

#define HAVE_ALIGN_ATTR   1

Definition at line 334 of file config_manual.h.

#define HAVE_BUILTIN_CPLX   1

Definition at line 333 of file config_manual.h.

#define HAVE_CONST_ATTR   1

Definition at line 337 of file config_manual.h.

#define HAVE_ERRNO   1

Definition at line 658 of file config_manual.h.

#define HAVE_ERRNO   1

Definition at line 658 of file config_manual.h.

#define HAVE_FUNC   2

Definition at line 491 of file config_manual.h.

#define HAVE_GCC_MINMAX   1

Definition at line 488 of file config_manual.h.

#define HAVE_GET_NPROCS   1

Definition at line 661 of file config_manual.h.

#define HAVE_GETLOADAVG   1

Definition at line 662 of file config_manual.h.

#define HAVE_IGNORE_STD_NS_BUG   1

Definition at line 486 of file config_manual.h.

#define HAVE_LONG_DOUBLE   1

Definition at line 476 of file config_manual.h.

#define HAVE_LONG_LONG   1

Definition at line 475 of file config_manual.h.

#define HAVE_MALLINFO   1

Definition at line 655 of file config_manual.h.

#define HAVE_MALLOC_ATTR   1

Definition at line 480 of file config_manual.h.

#define HAVE_MALLOC_H   1

Definition at line 654 of file config_manual.h.

#define HAVE_MEMALIGN   2

Definition at line 653 of file config_manual.h.

#define HAVE_MISS_STDCPLX_FANCY_FN_BUG   1

Definition at line 483 of file config_manual.h.

#define HAVE_MISS_STDCPLX_LOG10_BUG   1

Definition at line 484 of file config_manual.h.

#define HAVE_MISS_STDCPLX_TAN_BUG   1

Definition at line 485 of file config_manual.h.

#define HAVE_NAMED_RETVAL   1

Definition at line 490 of file config_manual.h.

#define HAVE_NEED_FOR_EXPL_TMPLPARM   1

Definition at line 479 of file config_manual.h.

#define HAVE_NEED_FOR_GD   1

Definition at line 478 of file config_manual.h.

#define HAVE_PRAGMA_IFACE_IMPL   1

Definition at line 339 of file config_manual.h.

#define HAVE_PRETTY_FUNCTION   __GNUC__

Definition at line 347 of file config_manual.h.

#define HAVE_PTHREADS   1

Definition at line 648 of file config_manual.h.

#define HAVE_REGPARM_ATTR   1

Definition at line 338 of file config_manual.h.

#define HAVE_SIGNALS   1

Definition at line 656 of file config_manual.h.

#define HAVE_SIGNATURE   1

Normally, we don't undefine our HAVE settings, as the user might know better and e.g.

pass EXTRA_CFLAGS=-DHAVE_NO_NEW_HEADERS_BUG to the compiler.

Definition at line 331 of file config_manual.h.

#define HAVE_STRSIGNAL   1

Definition at line 663 of file config_manual.h.

#define HAVE_SYS_SYSINFO_H   1

Definition at line 660 of file config_manual.h.

#define HAVE_UNISTD_H   1

Definition at line 465 of file config_manual.h.

#define HAVE_UNUSED_ATTR   1

Definition at line 336 of file config_manual.h.

#define HAVE_WEAK_ATTR   1

Definition at line 335 of file config_manual.h.