Ne.app NeANT
The Ne.app NeANT User module of the NeANT distribution.
_config-gcc.h
Go to the documentation of this file.
1
32// _REENTRANT is defined by the -pthread compiler option
33
34#ifndef _RWSTD_NO_IMPLICIT_INCLUSION
35# define _RWSTD_NO_IMPLICIT_INCLUSION
36#endif
37
38#ifndef _RWSTD_NO_EXPORT
39 // not implemented
40# define _RWSTD_NO_EXPORT
41#endif
42
43#ifndef __EXCEPTIONS
44 // disable exceptions when the macro __EXCEPTIONS
45 // is not #defined by the compiler, e.g., when
46 // the -fno-exceptions option is used
47# ifndef _RWSTD_NO_EXCEPTIONS
48# define _RWSTD_NO_EXCEPTIONS
49# endif // _RWSTD_NO_EXCEPTIONS
50#endif // __EXCEPTIONS
51
52#if !defined (_RWSTD_USE_PURE_C_HEADERS)
53 // disabled except when requested
54# define _RWSTD_NO_PURE_C_HEADERS
55#endif // !_RWSTD_USE_PURE_C_HEADERS
56
57#ifdef _RWSTD_NO_PURE_C_HEADERS
58 // deprecated C headers (the <xxx.h> kind) are fully implemented
59 // in terms of the pure C++ C library headers (the <cxxx> kind)
60# define _RWSTD_NO_DEPRECATED_C_HEADERS
61#endif // _RWSTD_NO_PURE_C_HEADERS
62
63#if !defined (_RWSTD_STRICT_ANSI) && __GNUG__ <= 2 && __GNUC_MINOR__ < 97
64 // prevent gcc 2.9x ICE
65# define _RWSTD_NO_PLACEMENT_DELETE
66#endif // !_RWSTD_STRICT_ANSI
67
68#if __GNUG__ < 3
69 // gcc 2.x doesn't understand the extern template syntax
70 // but only issues a warning: ANSI C++ forbids the use
71 // of `extern' on explicit instantiations
72# ifndef _RWSTD_NO_EXTERN_TEMPLATE
73# define _RWSTD_NO_EXTERN_TEMPLATE
74# endif // _RWSTD_NO_EXTERN_TEMPLATE
75#endif // gcc 2.x
76
77#if __GNUG__ <= 2 && __GNUC_MINOR__ < 97 && defined (_RWSTD_NO_HONOR_STD)
78 // standard iostream objects are declared as objects of their respective
79 // types by defined as POD's to prevent their destruction during program
80 // lifetime (done to work around a g++ 2.95.2 bug that prevents g++
81 // from deducing the type of references to the objects in template code)
82# define _RWSTD_NO_IOSTREAM_OBJECT_REFS
83#endif //__GNUG__ <= 2 && __GNUC_MINOR__ < 97 && _RWSTD_NO_HONOR_STD
84
85#define _RWSTD_GNUC_ATTRIBUTE(attr) __attribute__ (attr)
86
87// gcc attribute((noreturn)) to indicate that a function doesn't return
88// (it may still exit by throwing an exception or by calling longjmp)
89#define _RWSTD_ATTRIBUTE_NORETURN _RWSTD_GNUC_ATTRIBUTE ((noreturn))
90
91#if __GNUG__ > 3 || __GNUG__ == 3 && __GNUC_MINOR__ >= 3
92 // gcc attribute((nothrow)) to indicate that a function doesn't throw
93 // exceptions; unlike the emtpy exception specification the attribute
94 // avoids the cost of checking for exceptions and calling unexpected()
95# define _RWSTD_ATTRIBUTE_NOTHROW _RWSTD_GNUC_ATTRIBUTE ((nothrow))
96#endif // gcc >= 3.3
97
98#ifdef _RWSTD_OS_LINUX
99
100# ifdef _RWSTD_NO_NEW_HEADER
101# undef _RWSTD_NO_NEW_HEADER
102# endif // _RWSTD_NO_NEW_HEADER
103
104 // our <cxxx> libc headers put the libc functions in namespace std
105# ifdef _RWSTD_NO_LIBC_IN_STD
106# undef _RWSTD_NO_LIBC_IN_STD
107# endif // _RWSTD_NO_LIBC_IN_STD
108
109# ifdef _RWSTD_ANSI_C_LIMITS_H
110 // prevent system header warnings
111# undef _RWSTD_ANSI_C_LIMITS_H
112# define _RWSTD_ANSI_C_LIMITS_H <../include/limits.h>
113# endif // _RWSTD_ANSI_C_LIMITS_H
114#endif // _RWSTD_OS_LINUX
115
116#ifdef _RWSTD_OS_AIX
117 // functions called from member functions of explicitly instantiated
118 // class templates aren't "implicitly" instantiated (compiler bug)
119# define _RWSTD_NO_IMPLICIT_INSTANTIATION
120#endif
121
122 // force using /usr/include/math.h
123 // prevent recursion caused by pulling in gcc's own "fixed" header
124#undef _RWSTD_ANSI_C_MATH_H
125
126 // use new C++ libc headers
127#undef _RWSTD_NO_NEW_HEADER
128
129#undef _RWSTD_NO_LIBC_IN_STD
130
131#undef _RWSTD_NO_DEPRECATED_LIBC_IN_STD
132
133
134#ifdef __CYGWIN__
135 // use our own C++ libc headers
136# undef _RWSTD_NO_NEW_HEADER
137 // libc is wrapped in namespaces std
138# undef _RWSTD_NO_LIBC_IN_STD
139 // deprecated C++ libc headers don't introduce names into namespace std
140# ifndef _RWSTD_NO_DEPRECATED_LIBC_IN_STD
141# define _RWSTD_NO_DEPRECATED_LIBC_IN_STD
142# endif
143
144# ifdef _RWSHARED
145 // disable exporting tmeplate instantiations in shared builds
146 // see STDCXX-507
147# define _RWSTD_NO_EXTERN_TEMPLATE
148
149 // operator new and delete is not reliably replaceable across
150 // shared library boundaries, which includes the shared library
151 // version of the language support library
152# define _RWSTD_NO_REPLACEABLE_NEW_DELETE
153# endif
154#endif // __CYGWIN__
155
156
157#ifdef __MINGW32__
158# ifdef _RWSHARED
159 // disable exporting temeplate instantiations in shared builds
160 // see STDCXX-507
161# define _RWSTD_NO_EXTERN_TEMPLATE
162# endif
163
164 // operator new and delete is not reliably replaceable across
165 // shared library boundaries, which includes the shared library
166 // version of the language support library
167 // on MinGW the language support library is always shared
168# define _RWSTD_NO_REPLACEABLE_NEW_DELETE
169#endif // __MINGW32__
170
171
172#ifdef _RWSTD_OS_OSF1
173 // sizeof (long double) == sizeof (double), 'L' causes SIGSEGV
174# define _RWSTD_LDBL_PRINTF_PREFIX ""
175# define _RWSTD_LDBL_SCANF_PREFIX "l"
176
177#endif // _RWSTD_OS_OSF1
178
179
180#ifdef _RWSTD_OS_SUNOS
181
182 // _SOLARIS_THREADS #defined when the -threads option is used on SunOS
183# if defined (_SOLARIS_THREADS) && !defined (_RWSTD_SOLARIS_THREADS)
184# define _RWSTD_SOLARIS_THREADS
185# endif // _SOLARIS_THREADS && !_RWSTD_SOLARIS_THREADS
186
187 // _PTHREADS #defined when the -pthreads option is used on SunOS
188# if defined (_PTHREADS) && !defined (_RWSTD_POSIX_THREADS)
189# define _RWSTD_POSIX_THREADS
190# endif // _PTHREADS && !_RWSTD_POSIX_THREADS
191
192# if __GNUG__ == 3 && __GNUC_MINOR__ < 1
193 // Avoid gcc 3.0.1 header configuration confusion with wchar
194# ifndef _RWSTD_NO_NEW_HEADER
195# define _RWSTD_NO_NEW_HEADER
196# endif
197# ifndef _RWSTD_NO_LIBC_IN_STD
198# define _RWSTD_NO_LIBC_IN_STD
199# endif
200# endif // __GNUG__ == 3 && __GNUC_MINOR__ < 1
201#endif // _RWSTD_OS_SUNOS
202
203#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3))
204# define _RWSTD_TT_IS_ENUM(T) __is_enum(T)
205# define _RWSTD_TT_IS_UNION(T) __is_union(T)
206# define _RWSTD_TT_IS_CLASS(T) __is_class(T)
207# define _RWSTD_TT_IS_POD(T) __is_pod(T)
208# define _RWSTD_TT_IS_EMPTY(T) __is_empty(T)
209# define _RWSTD_TT_IS_POLYMORPHIC(T) __is_polymorphic(T)
210# define _RWSTD_TT_IS_ABSTRACT(T) __is_abstract(T)
211# define _RWSTD_TT_IS_BASE_OF(T,U) __is_base_of(T,U)
212
213# define _RWSTD_TT_HAS_TRIVIAL_CTOR(T) __has_trivial_constructor(T)
214# define _RWSTD_TT_HAS_TRIVIAL_COPY(T) __has_trivial_copy(T)
215# define _RWSTD_TT_HAS_TRIVIAL_ASSIGN(T) __has_trivial_assign(T)
216# define _RWSTD_TT_HAS_TRIVIAL_DTOR(T) __has_trivial_destructor(T)
217
218# define _RWSTD_TT_HAS_NOTHROW_CTOR(T) __has_nothrow_constructor(T)
219# define _RWSTD_TT_HAS_NOTHROW_COPY(T) __has_nothrow_copy(T)
220# define _RWSTD_TT_HAS_NOTHROW_ASSIGN(T) __has_nothrow_assign(T)
221
222# define _RWSTD_TT_HAS_VIRTUAL_DTOR(T) __has_virtual_destructor(T)
223
224# define _RWSTD_TT_ALIGN_OF(T) __alignof__(T)
225# define _RWSTD_TT_MAX_ALIGNMENT 16
226# define _RWSTD_TT_ALIGNED_POD(N) \
227 struct { unsigned char _C_align __attribute__ ((aligned ((N)))); }
228
229# ifdef __GXX_EXPERIMENTAL_CXX0X__
230 // enable C++ 0x features disabled in builds
231 // configured without -std=c++0x or -std=gnu++0x
232
233 // C++ 0x features supported since 4.3.0
234# undef _RWSTD_NO_VARIADIC_TEMPLATES
235# undef _RWSTD_NO_RVALUE_REFERENCES
236# endif
237
238#endif // __GNUC__ >= 4.3
239