diff --git a/config.htm b/config.htm index 3513d17b..8d1baf71 100644 --- a/config.htm +++ b/config.htm @@ -1135,7 +1135,7 @@ void g() { return f(); } - BOOST_CXX0X_CONCEPTS + BOOST_HAS_CONCEPTS The compiler supports concepts. Note: concepts have been proposed for C++0x, but have @@ -1143,35 +1143,21 @@ void g() { return f(); } - BOOST_CXX0X_LONG_LONG - - The compiler supports the long long. Identical to BOOST_HAS_LONG_LONG. - - - - BOOST_CXX0X_PREPROCESSOR - - The compiler supports the - C99 preprocessor, which includes variadic macros, concatenation of wide - string literals, and the _Pragma operator. - - - - BOOST_CXX0X_RVALUE_REFERENCES + BOOST_HAS_RVALUE_REFS The compiler supports rvalue references. - BOOST_CXX0X_STATIC_ASSERT + BOOST_HAS_STATIC_ASSERT The compiler supports static assertions. - BOOST_CXX0X_VARIADIC_TEMPLATES + BOOST_HAS_VARIADIC_TMPL The compiler supports variadic templates. Note: variadic templates have been proposed diff --git a/include/boost/config/compiler/gcc.hpp b/include/boost/config/compiler/gcc.hpp index e461d10c..0aaf8953 100644 --- a/include/boost/config/compiler/gcc.hpp +++ b/include/boost/config/compiler/gcc.hpp @@ -92,8 +92,10 @@ // defined by some very early development versions of GCC 4.3; we will // remove this part of the check in the near future. # if defined(__GXX_EXPERIMENTAL_CPP0X__) || defined(__GXX_EXPERIMENTAL_CXX0X__) -# define BOOST_CXX0X_PREPROCESSOR -# define BOOST_CXX0X_STATIC_ASSERT +# define BOOST_HAS_STATIC_ASSERT +# ifndef __STRICT_ANSI__ +# define BOOST_HAS_VARIADIC_TMPL +# endif # endif #endif @@ -104,13 +106,13 @@ // Variadic templates compiler: // http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html #ifdef __VARIADIC_TEMPLATES -# define BOOST_CXX0X_VARIADIC_TEMPLATES +# define BOOST_HAS_VARIADIC_TMPL #endif // ConceptGCC compiler: // http://www.generic-programming.org/software/ConceptGCC/ #ifdef __GXX_CONCEPTS__ -# define BOOST_CXX0X_CONCEPTS +# define BOOST_HAS_CONCEPTS # define BOOST_COMPILER "ConceptGCC version " __VERSION__ #endif diff --git a/include/boost/config/compiler/metrowerks.hpp b/include/boost/config/compiler/metrowerks.hpp index 6ebf5500..45d5d7e1 100644 --- a/include/boost/config/compiler/metrowerks.hpp +++ b/include/boost/config/compiler/metrowerks.hpp @@ -84,7 +84,7 @@ // C++0x features // #if __option(rvalue_refs) -# define BOOST_CXX0X_RVALUE_REFERENCES +# define BOOST_HAS_RVALUE_REFS #endif #define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) diff --git a/include/boost/config/suffix.hpp b/include/boost/config/suffix.hpp index 556fd312..badf1e51 100644 --- a/include/boost/config/suffix.hpp +++ b/include/boost/config/suffix.hpp @@ -38,16 +38,6 @@ # endif #endif -// BOOST_HAS_LONG_LONG implies BOOST_CXX0X_LONG_LONG, and vice-versa -#if defined(BOOST_HAS_LONG_LONG) || defined(BOOST_CXX0X_LONG_LONG) -# ifndef BOOST_HAS_LONG_LONG -# define BOOST_HAS_LONG_LONG -# endif -# ifndef BOOST_CXX0X_LONG_LONG -# define BOOST_CXX0X_LONG_LONG -# endif -#endif - // GCC 3.x will clean up all of those nasty macro definitions that // BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine // it under GCC 3.x. @@ -55,7 +45,6 @@ # undef BOOST_NO_CTYPE_FUNCTIONS #endif - // // Assume any extensions are in namespace std:: unless stated otherwise: // diff --git a/test/boost_has_concepts.ipp b/test/boost_has_concepts.ipp new file mode 100644 index 00000000..abc1740a --- /dev/null +++ b/test/boost_has_concepts.ipp @@ -0,0 +1,23 @@ +// Copyright (C) 2007 Douglas Gregor +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for most recent version. + +// MACRO: BOOST_HAS_CONCEPTS +// TITLE: concepts +// DESCRIPTION: The compiler supports C++0x concepts + +namespace boost_has_concepts { + +concept C { } + +concept_map C { } + +int test() +{ + return 0; +} + +} diff --git a/test/boost_has_rvalue_refs.ipp b/test/boost_has_rvalue_refs.ipp new file mode 100644 index 00000000..f0ce174d --- /dev/null +++ b/test/boost_has_rvalue_refs.ipp @@ -0,0 +1,26 @@ +// Copyright (C) 2007 Douglas Gregor +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for most recent version. + +// MACRO: BOOST_HAS_RVALUE_REFS +// TITLE: rvalue references +// DESCRIPTION: The compiler supports C++0x rvalue references + +namespace boost_has_rvalue_refs { + +void g(int&) {} + +template +void forward(F f, T&& t) { f(static_cast(t)); } + +int test() +{ + int x; + forward(g, x); + return 0; +} + +} diff --git a/test/boost_has_static_assert.ipp b/test/boost_has_static_assert.ipp new file mode 100644 index 00000000..545938a0 --- /dev/null +++ b/test/boost_has_static_assert.ipp @@ -0,0 +1,20 @@ +// Copyright (C) 2007 Douglas Gregor +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for most recent version. + +// MACRO: BOOST_HAS_STATIC_ASSERT +// TITLE: static assertions +// DESCRIPTION: The compiler supports C++0x static assertions + +namespace boost_has_static_assert { + +int test() +{ + static_assert(true, "OK"); + return 0; +} + +} diff --git a/test/boost_has_variadic_tmpl.ipp b/test/boost_has_variadic_tmpl.ipp new file mode 100644 index 00000000..539c512a --- /dev/null +++ b/test/boost_has_variadic_tmpl.ipp @@ -0,0 +1,21 @@ +// Copyright (C) 2007 Douglas Gregor +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for most recent version. + +// MACRO: BOOST_HAS_VARIADIC_TMPL +// TITLE: variadic templates +// DESCRIPTION: The compiler supports C++0x variadic templates + +namespace boost_has_variadic_tmpl { + +template struct tuple {}; + +int test() +{ + return 0; +} + +}