00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 #pragma once 00030 00031 // #define GLM_CXX98_EXCEPTIONS 00032 // #define GLM_CXX98_RTTI 00033 00034 // #define GLM_CXX11_RVALUE_REFERENCES 00035 // Rvalue references - GCC 4.3 00036 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html 00037 00038 // GLM_CXX11_TRAILING_RETURN 00039 // Rvalue references for *this - GCC not supported 00040 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm 00041 00042 // GLM_CXX11_NONSTATIC_MEMBER_INIT 00043 // Initialization of class objects by rvalues - GCC any 00044 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html 00045 00046 // GLM_CXX11_NONSTATIC_MEMBER_INIT 00047 // Non-static data member initializers - GCC 4.7 00048 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm 00049 00050 // #define GLM_CXX11_VARIADIC_TEMPLATE 00051 // Variadic templates - GCC 4.3 00052 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf 00053 00054 // 00055 // Extending variadic template template parameters - GCC 4.4 00056 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf 00057 00058 // #define GLM_CXX11_GENERALIZED_INITIALIZERS 00059 // Initializer lists - GCC 4.4 00060 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm 00061 00062 // #define GLM_CXX11_STATIC_ASSERT 00063 // Static assertions - GCC 4.3 00064 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html 00065 00066 // #define GLM_CXX11_AUTO_TYPE 00067 // auto-typed variables - GCC 4.4 00068 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf 00069 00070 // #define GLM_CXX11_AUTO_TYPE 00071 // Multi-declarator auto - GCC 4.4 00072 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf 00073 00074 // #define GLM_CXX11_AUTO_TYPE 00075 // Removal of auto as a storage-class specifier - GCC 4.4 00076 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm 00077 00078 // #define GLM_CXX11_AUTO_TYPE 00079 // New function declarator syntax - GCC 4.4 00080 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm 00081 00082 // #define GLM_CXX11_LAMBDAS 00083 // New wording for C++0x lambdas - GCC 4.5 00084 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf 00085 00086 // #define GLM_CXX11_DECLTYPE 00087 // Declared type of an expression - GCC 4.3 00088 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf 00089 00090 // 00091 // Right angle brackets - GCC 4.3 00092 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html 00093 00094 // 00095 // Default template arguments for function templates DR226 GCC 4.3 00096 // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226 00097 00098 // 00099 // Solving the SFINAE problem for expressions DR339 GCC 4.4 00100 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html 00101 00102 // #define GLM_CXX11_ALIAS_TEMPLATE 00103 // Template aliases N2258 GCC 4.7 00104 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf 00105 00106 // 00107 // Extern templates N1987 Yes 00108 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm 00109 00110 // #define GLM_CXX11_NULLPTR 00111 // Null pointer constant N2431 GCC 4.6 00112 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf 00113 00114 // #define GLM_CXX11_STRONG_ENUMS 00115 // Strongly-typed enums N2347 GCC 4.4 00116 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf 00117 00118 // 00119 // Forward declarations for enums N2764 GCC 4.6 00120 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf 00121 00122 // 00123 // Generalized attributes N2761 GCC 4.8 00124 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf 00125 00126 // 00127 // Generalized constant expressions N2235 GCC 4.6 00128 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf 00129 00130 // 00131 // Alignment support N2341 GCC 4.8 00132 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf 00133 00134 // #define GLM_CXX11_DELEGATING_CONSTRUCTORS 00135 // Delegating constructors N1986 GCC 4.7 00136 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf 00137 00138 // 00139 // Inheriting constructors N2540 GCC 4.8 00140 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm 00141 00142 // #define GLM_CXX11_EXPLICIT_CONVERSIONS 00143 // Explicit conversion operators N2437 GCC 4.5 00144 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf 00145 00146 // 00147 // New character types N2249 GCC 4.4 00148 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html 00149 00150 // 00151 // Unicode string literals N2442 GCC 4.5 00152 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm 00153 00154 // 00155 // Raw string literals N2442 GCC 4.5 00156 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm 00157 00158 // 00159 // Universal character name literals N2170 GCC 4.5 00160 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html 00161 00162 // #define GLM_CXX11_USER_LITERALS 00163 // User-defined literals N2765 GCC 4.7 00164 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf 00165 00166 // 00167 // Standard Layout Types N2342 GCC 4.5 00168 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm 00169 00170 // #define GLM_CXX11_DEFAULTED_FUNCTIONS 00171 // #define GLM_CXX11_DELETED_FUNCTIONS 00172 // Defaulted and deleted functions N2346 GCC 4.4 00173 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm 00174 00175 // 00176 // Extended friend declarations N1791 GCC 4.7 00177 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf 00178 00179 // 00180 // Extending sizeof N2253 GCC 4.4 00181 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html 00182 00183 // #define GLM_CXX11_INLINE_NAMESPACES 00184 // Inline namespaces N2535 GCC 4.4 00185 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm 00186 00187 // #define GLM_CXX11_UNRESTRICTED_UNIONS 00188 // Unrestricted unions N2544 GCC 4.6 00189 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf 00190 00191 // #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS 00192 // Local and unnamed types as template arguments N2657 GCC 4.5 00193 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm 00194 00195 // #define GLM_CXX11_RANGE_FOR 00196 // Range-based for N2930 GCC 4.6 00197 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html 00198 00199 // #define GLM_CXX11_OVERRIDE_CONTROL 00200 // Explicit virtual overrides N2928 N3206 N3272 GCC 4.7 00201 // http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm 00202 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm 00203 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm 00204 00205 // 00206 // Minimal support for garbage collection and reachability-based leak detection N2670 No 00207 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm 00208 00209 // #define GLM_CXX11_NOEXCEPT 00210 // Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only) 00211 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html 00212 00213 // 00214 // Defining move special member functions N3053 GCC 4.6 00215 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html 00216 00217 // 00218 // Sequence points N2239 Yes 00219 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html 00220 00221 // 00222 // Atomic operations N2427 GCC 4.4 00223 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html 00224 00225 // 00226 // Strong Compare and Exchange N2748 GCC 4.5 00227 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html 00228 00229 // 00230 // Bidirectional Fences N2752 GCC 4.8 00231 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm 00232 00233 // 00234 // Memory model N2429 GCC 4.8 00235 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm 00236 00237 // 00238 // Data-dependency ordering: atomics and memory model N2664 GCC 4.4 00239 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm 00240 00241 // 00242 // Propagating exceptions N2179 GCC 4.4 00243 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html 00244 00245 // 00246 // Abandoning a process and at_quick_exit N2440 GCC 4.8 00247 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm 00248 00249 // 00250 // Allow atomics use in signal handlers N2547 Yes 00251 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm 00252 00253 // 00254 // Thread-local storage N2659 GCC 4.8 00255 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm 00256 00257 // 00258 // Dynamic initialization and destruction with concurrency N2660 GCC 4.3 00259 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm 00260 00261 // 00262 // __func__ predefined identifier N2340 GCC 4.3 00263 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm 00264 00265 // 00266 // C99 preprocessor N1653 GCC 4.3 00267 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm 00268 00269 // 00270 // long long N1811 GCC 4.3 00271 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf 00272 00273 // 00274 // Extended integral types N1988 Yes 00275 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf 00276 00277 #if(GLM_COMPILER & GLM_COMPILER_GCC) 00278 00279 # if(GLM_COMPILER >= GLM_COMPILER_GCC43) 00280 # define GLM_CXX11_STATIC_ASSERT 00281 # endif 00282 00283 #elif(GLM_COMPILER & GLM_COMPILER_CLANG) 00284 # if(__has_feature(cxx_exceptions)) 00285 # define GLM_CXX98_EXCEPTIONS 00286 # endif 00287 00288 # if(__has_feature(cxx_rtti)) 00289 # define GLM_CXX98_RTTI 00290 # endif 00291 00292 # if(__has_feature(cxx_access_control_sfinae)) 00293 # define GLM_CXX11_ACCESS_CONTROL_SFINAE 00294 # endif 00295 00296 # if(__has_feature(cxx_alias_templates)) 00297 # define GLM_CXX11_ALIAS_TEMPLATE 00298 # endif 00299 00300 # if(__has_feature(cxx_alignas)) 00301 # define GLM_CXX11_ALIGNAS 00302 # endif 00303 00304 # if(__has_feature(cxx_attributes)) 00305 # define GLM_CXX11_ATTRIBUTES 00306 # endif 00307 00308 # if(__has_feature(cxx_constexpr)) 00309 # define GLM_CXX11_CONSTEXPR 00310 # endif 00311 00312 # if(__has_feature(cxx_decltype)) 00313 # define GLM_CXX11_DECLTYPE 00314 # endif 00315 00316 # if(__has_feature(cxx_default_function_template_args)) 00317 # define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS 00318 # endif 00319 00320 # if(__has_feature(cxx_defaulted_functions)) 00321 # define GLM_CXX11_DEFAULTED_FUNCTIONS 00322 # endif 00323 00324 # if(__has_feature(cxx_delegating_constructors)) 00325 # define GLM_CXX11_DELEGATING_CONSTRUCTORS 00326 # endif 00327 00328 # if(__has_feature(cxx_deleted_functions)) 00329 # define GLM_CXX11_DELETED_FUNCTIONS 00330 # endif 00331 00332 # if(__has_feature(cxx_explicit_conversions)) 00333 # define GLM_CXX11_EXPLICIT_CONVERSIONS 00334 # endif 00335 00336 # if(__has_feature(cxx_generalized_initializers)) 00337 # define GLM_CXX11_GENERALIZED_INITIALIZERS 00338 # endif 00339 00340 # if(__has_feature(cxx_implicit_moves)) 00341 # define GLM_CXX11_IMPLICIT_MOVES 00342 # endif 00343 00344 # if(__has_feature(cxx_inheriting_constructors)) 00345 # define GLM_CXX11_INHERITING_CONSTRUCTORS 00346 # endif 00347 00348 # if(__has_feature(cxx_inline_namespaces)) 00349 # define GLM_CXX11_INLINE_NAMESPACES 00350 # endif 00351 00352 # if(__has_feature(cxx_lambdas)) 00353 # define GLM_CXX11_LAMBDAS 00354 # endif 00355 00356 # if(__has_feature(cxx_local_type_template_args)) 00357 # define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS 00358 # endif 00359 00360 # if(__has_feature(cxx_noexcept)) 00361 # define GLM_CXX11_NOEXCEPT 00362 # endif 00363 00364 # if(__has_feature(cxx_nonstatic_member_init)) 00365 # define GLM_CXX11_NONSTATIC_MEMBER_INIT 00366 # endif 00367 00368 # if(__has_feature(cxx_nullptr)) 00369 # define GLM_CXX11_NULLPTR 00370 # endif 00371 00372 # if(__has_feature(cxx_override_control)) 00373 # define GLM_CXX11_OVERRIDE_CONTROL 00374 # endif 00375 00376 # if(__has_feature(cxx_reference_qualified_functions)) 00377 # define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS 00378 # endif 00379 00380 # if(__has_feature(cxx_range_for)) 00381 # define GLM_CXX11_RANGE_FOR 00382 # endif 00383 00384 # if(__has_feature(cxx_raw_string_literals)) 00385 # define GLM_CXX11_RAW_STRING_LITERALS 00386 # endif 00387 00388 # if(__has_feature(cxx_rvalue_references)) 00389 # define GLM_CXX11_RVALUE_REFERENCES 00390 # endif 00391 00392 # if(__has_feature(cxx_static_assert)) 00393 # define GLM_CXX11_STATIC_ASSERT 00394 # endif 00395 00396 # if(__has_feature(cxx_auto_type)) 00397 # define GLM_CXX11_AUTO_TYPE 00398 # endif 00399 00400 # if(__has_feature(cxx_strong_enums)) 00401 # define GLM_CXX11_STRONG_ENUMS 00402 # endif 00403 00404 # if(__has_feature(cxx_trailing_return)) 00405 # define GLM_CXX11_TRAILING_RETURN 00406 # endif 00407 00408 # if(__has_feature(cxx_unicode_literals)) 00409 # define GLM_CXX11_UNICODE_LITERALS 00410 # endif 00411 00412 # if(__has_feature(cxx_unrestricted_unions)) 00413 # define GLM_CXX11_UNRESTRICTED_UNIONS 00414 # endif 00415 00416 # if(__has_feature(cxx_user_literals)) 00417 # define GLM_CXX11_USER_LITERALS 00418 # endif 00419 00420 # if(__has_feature(cxx_variadic_templates)) 00421 # define GLM_CXX11_VARIADIC_TEMPLATES 00422 # endif 00423 00424 #endif//(GLM_COMPILER & GLM_COMPILER_CLANG)