diff --git a/doc/html/boost_config/boost_macro_reference.html b/doc/html/boost_config/boost_macro_reference.html index 21c225ee..2f49f1aa 100644 --- a/doc/html/boost_config/boost_macro_reference.html +++ b/doc/html/boost_config/boost_macro_reference.html @@ -2377,6 +2377,18 @@ + +

+ BOOST_NO_CXX11_ADDRESSOF +

+ + +

+ The standard library header <memory> has no working std::addressof. +

+ + +

BOOST_NO_CXX11_ALIGNAS @@ -2681,6 +2693,18 @@ + +

+ BOOST_NO_CXX11_STD_ALIGN +

+ + +

+ The standard library header <memory> has no working std::align. +

+ + +

BOOST_NO_CXX11_AUTO_DECLARATIONS @@ -2939,6 +2963,19 @@ + +

+ BOOST_NO_CXX11_REF_QUALIFIERS +

+ + +

+ The compiler does not support ref-qualifiers on member functions + as described in N2439. +

+ + +

BOOST_NO_CXX11_RVALUE_REFERENCES diff --git a/doc/html/index.html b/doc/html/index.html index cf18f912..8eaa462b 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -951,7 +951,7 @@ - +

Last revised: December 12, 2013 at 19:29:48 GMT

Last revised: May 28, 2014 at 15:31:56 GMT


diff --git a/doc/macro_reference.qbk b/doc/macro_reference.qbk index f15cf425..9bb3fa30 100644 --- a/doc/macro_reference.qbk +++ b/doc/macro_reference.qbk @@ -664,6 +664,10 @@ range-based for statements. [[`BOOST_NO_CXX11_RAW_LITERALS`][The compiler does not support raw string literals. ]] +[[`BOOST_NO_CXX11_REF_QUALIFIERS`][The compiler does not support +ref-qualifiers on member functions as described in +[@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm N2439]. +]] [[`BOOST_NO_CXX11_RVALUE_REFERENCES`][The compiler does not support r-value references. ]] diff --git a/include/boost/config/compiler/clang.hpp b/include/boost/config/compiler/clang.hpp index c2a735f5..6a178242 100644 --- a/include/boost/config/compiler/clang.hpp +++ b/include/boost/config/compiler/clang.hpp @@ -140,6 +140,10 @@ # define BOOST_NO_CXX11_RAW_LITERALS #endif +#if !__has_feature(cxx_reference_qualified_functions) +# define BOOST_NO_CXX11_REF_QUALIFIERS +#endif + #if !__has_feature(cxx_generalized_initializers) # define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #endif diff --git a/include/boost/config/compiler/gcc.hpp b/include/boost/config/compiler/gcc.hpp index c560d6ae..ef6b07e2 100644 --- a/include/boost/config/compiler/gcc.hpp +++ b/include/boost/config/compiler/gcc.hpp @@ -232,6 +232,7 @@ // #if (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40801) || !defined(__GXX_EXPERIMENTAL_CXX0X__) # define BOOST_NO_CXX11_DECLTYPE_N3276 +# define BOOST_NO_CXX11_REF_QUALIFIERS #endif #ifndef BOOST_COMPILER diff --git a/include/boost/config/compiler/intel.hpp b/include/boost/config/compiler/intel.hpp index 3f0eaa18..cbc9422f 100644 --- a/include/boost/config/compiler/intel.hpp +++ b/include/boost/config/compiler/intel.hpp @@ -265,6 +265,7 @@ template<> struct assert_intrinsic_wchar_t {}; # undef BOOST_NO_CXX11_HDR_THREAD # undef BOOST_NO_CXX11_CHAR32_T # undef BOOST_NO_CXX11_CHAR16_T +# undef BOOST_NO_CXX11_REF_QUALIFIERS #endif #if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION <= 1310) diff --git a/include/boost/config/compiler/visualc.hpp b/include/boost/config/compiler/visualc.hpp index fb30fc12..842f0865 100644 --- a/include/boost/config/compiler/visualc.hpp +++ b/include/boost/config/compiler/visualc.hpp @@ -173,6 +173,7 @@ #define BOOST_NO_CXX11_CHAR32_T #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_REF_QUALIFIERS #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_SFINAE_EXPR #define BOOST_NO_TWO_PHASE_NAME_LOOKUP diff --git a/test/all/Jamfile.v2 b/test/all/Jamfile.v2 index bbc9c8c5..4eeafdb8 100644 --- a/test/all/Jamfile.v2 +++ b/test/all/Jamfile.v2 @@ -1,7 +1,7 @@ # # Regression test Jamfile for boost configuration setup. # *** DO NOT EDIT THIS FILE BY HAND *** -# This file was automatically generated on Tue Feb 11 17:12:28 2014 +# This file was automatically generated on Wed May 28 17:13:04 2014 # by libs/config/tools/generate.cpp # Copyright John Maddock. # Use, modification and distribution are subject to the @@ -301,6 +301,9 @@ test-suite "BOOST_NO_CXX11_INLINE_NAMESPACES" : test-suite "BOOST_NO_CXX11_NUMERIC_LIMITS" : [ run ../no_cxx11_numeric_limits_pass.cpp ] [ compile-fail ../no_cxx11_numeric_limits_fail.cpp ] ; +test-suite "BOOST_NO_CXX11_REF_QUALIFIERS" : +[ run ../no_cxx11_ref_qualifiers_pass.cpp ] +[ compile-fail ../no_cxx11_ref_qualifiers_fail.cpp ] ; test-suite "BOOST_NO_CXX11_SMART_PTR" : [ run ../no_cxx11_smart_ptr_pass.cpp ] [ compile-fail ../no_cxx11_smart_ptr_fail.cpp ] ; diff --git a/test/boost_no_cxx11_ref_qualifiers.ipp b/test/boost_no_cxx11_ref_qualifiers.ipp new file mode 100644 index 00000000..4cd8441c --- /dev/null +++ b/test/boost_no_cxx11_ref_qualifiers.ipp @@ -0,0 +1,33 @@ +// (C) Copyright Andrzej Krzemienski 2014 + +// 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 more information. + +// MACRO: BOOST_NO_CXX11_REF_QUALIFIERS +// TITLE: C++11 ref-qualifiers on member functions. +// DESCRIPTION: The compiler does not support the C++11 ref-qualifiers on member functions as described in N2439. + +namespace boost_no_cxx11_ref_qualifiers { + +struct G +{ + char get() & { return 'l'; } + char get() && { return 'r'; } + char get() const& { return 'c'; } +}; + +int test() +{ + G m; + const G c; + + if (m.get() != 'l') return 1; + if (c.get() != 'c') return 1; + if (G().get() != 'r') return 1; + return 0; +} + +} diff --git a/test/config_info.cpp b/test/config_info.cpp index 5a174c09..4424a0a4 100644 --- a/test/config_info.cpp +++ b/test/config_info.cpp @@ -1036,6 +1036,7 @@ void print_boost_macros() PRINT_MACRO(BOOST_NO_CXX11_NUMERIC_LIMITS); PRINT_MACRO(BOOST_NO_CXX11_RANGE_BASED_FOR); PRINT_MACRO(BOOST_NO_CXX11_RAW_LITERALS); + PRINT_MACRO(BOOST_NO_CXX11_REF_QUALIFIERS); PRINT_MACRO(BOOST_NO_CXX11_RVALUE_REFERENCES); PRINT_MACRO(BOOST_NO_CXX11_SCOPED_ENUMS); PRINT_MACRO(BOOST_NO_CXX11_SMART_PTR); @@ -1117,6 +1118,7 @@ void print_boost_macros() + // END GENERATED BLOCK PRINT_MACRO(BOOST_INTEL); diff --git a/test/config_test.cpp b/test/config_test.cpp index 9bc6c545..8fec16cc 100644 --- a/test/config_test.cpp +++ b/test/config_test.cpp @@ -1,4 +1,4 @@ -// This file was automatically generated on Tue Feb 11 17:12:28 2014 +// This file was automatically generated on Wed May 28 17:13:04 2014 // by libs/config/tools/generate.cpp // Copyright John Maddock 2002-4. // Use, modification and distribution are subject to the @@ -227,6 +227,11 @@ namespace boost_no_cxx11_inline_namespaces = empty_boost; #else namespace boost_no_cxx11_numeric_limits = empty_boost; #endif +#ifndef BOOST_NO_CXX11_REF_QUALIFIERS +#include "boost_no_cxx11_ref_qualifiers.ipp" +#else +namespace boost_no_cxx11_ref_qualifiers = empty_boost; +#endif #ifndef BOOST_NO_CXX11_SMART_PTR #include "boost_no_cxx11_smart_ptr.ipp" #else @@ -1386,6 +1391,11 @@ int main( int, char *[] ) std::cerr << "Failed test for BOOST_NO_CXX11_NUMERIC_LIMITS at: " << __FILE__ << ":" << __LINE__ << std::endl; ++error_count; } + if(0 != boost_no_cxx11_ref_qualifiers::test()) + { + std::cerr << "Failed test for BOOST_NO_CXX11_REF_QUALIFIERS at: " << __FILE__ << ":" << __LINE__ << std::endl; + ++error_count; + } if(0 != boost_no_cxx11_smart_ptr::test()) { std::cerr << "Failed test for BOOST_NO_CXX11_SMART_PTR at: " << __FILE__ << ":" << __LINE__ << std::endl; diff --git a/test/no_cxx11_ref_qualifiers_fail.cpp b/test/no_cxx11_ref_qualifiers_fail.cpp new file mode 100644 index 00000000..413ca8e9 --- /dev/null +++ b/test/no_cxx11_ref_qualifiers_fail.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Wed May 28 17:13:04 2014 +// by libs/config/tools/generate.cpp +// Copyright John Maddock 2002-4. +// 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 the most recent version.// +// Revision $Id$ +// + + +// Test file for macro BOOST_NO_CXX11_REF_QUALIFIERS +// This file should not compile, if it does then +// BOOST_NO_CXX11_REF_QUALIFIERS should not be defined. +// See file boost_no_cxx11_ref_qualifiers.ipp for details + +// Must not have BOOST_ASSERT_CONFIG set; it defeats +// the objective of this file: +#ifdef BOOST_ASSERT_CONFIG +# undef BOOST_ASSERT_CONFIG +#endif + +#include +#include "test.hpp" + +#ifdef BOOST_NO_CXX11_REF_QUALIFIERS +#include "boost_no_cxx11_ref_qualifiers.ipp" +#else +#error "this file should not compile" +#endif + +int main( int, char *[] ) +{ + return boost_no_cxx11_ref_qualifiers::test(); +} + diff --git a/test/no_cxx11_ref_qualifiers_pass.cpp b/test/no_cxx11_ref_qualifiers_pass.cpp new file mode 100644 index 00000000..99216f60 --- /dev/null +++ b/test/no_cxx11_ref_qualifiers_pass.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Wed May 28 17:13:04 2014 +// by libs/config/tools/generate.cpp +// Copyright John Maddock 2002-4. +// 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 the most recent version.// +// Revision $Id$ +// + + +// Test file for macro BOOST_NO_CXX11_REF_QUALIFIERS +// This file should compile, if it does not then +// BOOST_NO_CXX11_REF_QUALIFIERS should be defined. +// See file boost_no_cxx11_ref_qualifiers.ipp for details + +// Must not have BOOST_ASSERT_CONFIG set; it defeats +// the objective of this file: +#ifdef BOOST_ASSERT_CONFIG +# undef BOOST_ASSERT_CONFIG +#endif + +#include +#include "test.hpp" + +#ifndef BOOST_NO_CXX11_REF_QUALIFIERS +#include "boost_no_cxx11_ref_qualifiers.ipp" +#else +namespace boost_no_cxx11_ref_qualifiers = empty_boost; +#endif + +int main( int, char *[] ) +{ + return boost_no_cxx11_ref_qualifiers::test(); +} +