diff --git a/doc/html/boost_config/boost_macro_reference.html b/doc/html/boost_config/boost_macro_reference.html index a76b9e0e..eed14728 100644 --- a/doc/html/boost_config/boost_macro_reference.html +++ b/doc/html/boost_config/boost_macro_reference.html @@ -650,6 +650,24 @@ + +

+ BOOST_NO_NESTED_FRIENDSHIP +

+ + +

+ Compiler +

+ + +

+ Compiler doesn't allow a nested class to access private members of + its containing class. Probably Borland/CodeGear specific. +

+ + +

BOOST_NO_OPERATORS_IN_NAMESPACE @@ -1134,6 +1152,24 @@ + +

+ BOOST_NO_TYPENAME_WITH_CTOR +

+ + +

+ Compiler +

+ + +

+ The typename keyword cannot be used when creating a temporary of + a Dependent type. +

+ + +

BOOST_NO_UNREACHABLE_RETURN_DETECTION diff --git a/doc/html/index.html b/doc/html/index.html index f11a3c2e..d432aeed 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -962,7 +962,7 @@

- +

Last revised: August 25, 2008 at 09:59:24 GMT

Last revised: September 19, 2008 at 12:01:08 GMT


diff --git a/doc/macro_reference.qbk b/doc/macro_reference.qbk index 977eb681..90b6659c 100644 --- a/doc/macro_reference.qbk +++ b/doc/macro_reference.qbk @@ -171,6 +171,10 @@ There is no specialization for `numeric_limits<__int64>` and specializations as a standard library "fix", only if the compiler supports the `__int64` datatype. ]] +[[`BOOST_NO_NESTED_FRIENDSHIP`][Compiler][ +Compiler doesn't allow a nested class to access private members of its +containing class. Probably Borland/CodeGear specific. +]] [[`BOOST_NO_OPERATORS_IN_NAMESPACE`][Compiler][ Compiler requires inherited operator friend functions to be defined at namespace scope, then using'ed to boost. Probably GCC specific. See @@ -271,6 +275,10 @@ The compiler does not support template template parameters. [[`BOOST_NO_TYPEID`][Compiler][ The compiler does not support the typeid operator at all. ]] +[[`BOOST_NO_TYPENAME_WITH_CTOR`][Compiler][ +The typename keyword cannot be used when creating a temporary of a +Dependent type. +]] [[`BOOST_NO_UNREACHABLE_RETURN_DETECTION`][Compiler][ If a return is unreachable, then no return statement should be required, however some compilers insist on it, while other issue a bunch of warnings diff --git a/include/boost/config/abi/msvc_prefix.hpp b/include/boost/config/abi/msvc_prefix.hpp index 3d3905c2..97f06cdc 100644 --- a/include/boost/config/abi/msvc_prefix.hpp +++ b/include/boost/config/abi/msvc_prefix.hpp @@ -3,6 +3,20 @@ // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#pragma pack(push,8) +// +// Boost binaries are built with the compiler's default ABI settings, +// if the user changes their default alignment in the VS IDE then their +// code will no longer be binary compatible with the bjam built binaries +// unless this header is included to force Boost code into a consistent ABI. +// +// Note that inclusion of this header is only necessary for libraries with +// separate source, header only libraries DO NOT need this as long as all +// translation units are built with the same options. +// +#if defined(_M_X64) +# pragma pack(push,16) +#else +# pragma pack(push,8) +#endif diff --git a/include/boost/config/compiler/codegear.hpp b/include/boost/config/compiler/codegear.hpp index 655a9600..d27817a9 100644 --- a/include/boost/config/compiler/codegear.hpp +++ b/include/boost/config/compiler/codegear.hpp @@ -40,10 +40,11 @@ // we shouldn't really need this - but too many things choke // without it, this needs more investigation: # define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS +# define BOOST_NO_TYPENAME_WITH_CTOR // Cannot use typename keyword when making temporaries of a dependant type +# define BOOST_NO_NESTED_FRIENDSHIP // TC1 gives nested classes access rights as any other member -// Still need tests writing -// # define BOOST_NO_TYPENAME_WITH_CTOR // Cannot use typename keyword when making temporaries of a dependant type -// # define BOOST_NO_NESTED_FRIENDSHIP // TC1 gives nested classes access rights as any other member +// Temporary hack, until specific MPL preprocessed headers are generated +# define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS # ifdef NDEBUG // fix broken so that Boost.test works: diff --git a/include/boost/config/compiler/intel.hpp b/include/boost/config/compiler/intel.hpp index 3f044ebb..bc3d4e99 100644 --- a/include/boost/config/compiler/intel.hpp +++ b/include/boost/config/compiler/intel.hpp @@ -152,6 +152,11 @@ template<> struct assert_intrinsic_wchar_t {}; # define BOOST_NO_TWO_PHASE_NAME_LOOKUP #endif +// Intel on Altix Itanium +#if defined(__itanium__) && defined(__INTEL_COMPILER) +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif + // // last known and checked version: #if (BOOST_INTEL_CXX_VERSION > 1010) diff --git a/include/boost/config/compiler/sunpro_cc.hpp b/include/boost/config/compiler/sunpro_cc.hpp index eed57da8..f513c2dc 100644 --- a/include/boost/config/compiler/sunpro_cc.hpp +++ b/include/boost/config/compiler/sunpro_cc.hpp @@ -75,6 +75,10 @@ #define BOOST_NO_TWO_PHASE_NAME_LOOKUP #define BOOST_NO_ADL_BARRIER +#if(__SUNPRO_CC >= 0x590) +# define BOOST_HAS_LONG_LONG +#endif + #define BOOST_COMPILER "Sun compiler version " BOOST_STRINGIZE(__SUNPRO_CC) diff --git a/include/boost/config/suffix.hpp b/include/boost/config/suffix.hpp index dd7c998e..f71c644f 100644 --- a/include/boost/config/suffix.hpp +++ b/include/boost/config/suffix.hpp @@ -442,6 +442,12 @@ namespace std { # define BOOST_DEDUCED_TYPENAME #endif +#ifndef BOOST_NO_TYPENAME_WITH_CTOR +# define BOOST_CTOR_TYPENAME typename +#else +# define BOOST_CTOR_TYPENAME +#endif + // long long workaround ------------------------------------------// // On gcc (and maybe other compilers?) long long is alway supported // but it's use may generate either warnings (with -ansi), or errors diff --git a/test/all/Jamfile.v2 b/test/all/Jamfile.v2 index d04849d0..cd761fb5 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 Mon Aug 25 10:51:52 2008 +# This file was automatically generated on Sat Sep 20 09:49:52 2008 # by libs/config/tools/generate.cpp # Copyright John Maddock. # Use, modification and distribution are subject to the @@ -274,6 +274,9 @@ test-suite "BOOST_NO_MEMBER_TEMPLATE_KEYWORD" : test-suite "BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS" : [ run ../no_mem_tem_pnts_pass.cpp ] [ compile-fail ../no_mem_tem_pnts_fail.cpp ] ; +test-suite "BOOST_NO_NESTED_FRIENDSHIP" : +[ run ../no_nested_friendship_pass.cpp ] +[ compile-fail ../no_nested_friendship_fail.cpp ] ; test-suite "BOOST_NO_OPERATORS_IN_NAMESPACE" : [ run ../no_ops_in_namespace_pass.cpp ] [ compile-fail ../no_ops_in_namespace_fail.cpp ] ; @@ -355,6 +358,9 @@ test-suite "BOOST_NO_TWO_PHASE_NAME_LOOKUP" : test-suite "BOOST_NO_TYPEID" : [ run ../no_typeid_pass.cpp ] [ compile-fail ../no_typeid_fail.cpp ] ; +test-suite "BOOST_NO_TYPENAME_WITH_CTOR" : +[ run ../no_typename_with_ctor_pass.cpp ] +[ compile-fail ../no_typename_with_ctor_fail.cpp ] ; test-suite "BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL" : [ run ../no_using_breaks_adl_pass.cpp ] [ compile-fail ../no_using_breaks_adl_fail.cpp ] ; diff --git a/test/boost_no_is_abstract.ipp b/test/boost_no_is_abstract.ipp index a1fba856..d44695c8 100644 --- a/test/boost_no_is_abstract.ipp +++ b/test/boost_no_is_abstract.ipp @@ -12,11 +12,18 @@ namespace boost_no_is_abstract{ +#if defined(__CODEGEARC__) template struct is_abstract_test { - // Deduction fails if T is void, function type, - // reference type (14.8.2/2)or an abstract class type + enum{ value = __is_abstract(T) }; +}; +#else +template +struct is_abstract_test +{ + // Deduction fails if T is void, function type, + // reference type (14.8.2/2)or an abstract class type // according to review status issue #337 // template @@ -29,9 +36,10 @@ struct is_abstract_test #else enum{ s1 = sizeof(check_sig(0)) }; #endif - + enum{ value = (s1 == sizeof(char)) }; }; +#endif struct non_abstract{}; struct abstract{ virtual void foo() = 0; }; @@ -43,10 +51,3 @@ int test() } - - - - - - - diff --git a/test/boost_no_nested_friendship.ipp b/test/boost_no_nested_friendship.ipp new file mode 100644 index 00000000..eb726509 --- /dev/null +++ b/test/boost_no_nested_friendship.ipp @@ -0,0 +1,21 @@ +// MACRO: BOOST_NO_NESTED_FRIENDSHIP +// TITLE: Access to private members from nested classes +// DESCRIPTION: If the compiler fails to support access to private members +// from nested classes + +namespace boost_no_nested_friendship { + +class A { + static int b; + class B { + int f() { return b; } + }; +}; + +int test() +{ + return 0; +} + +} + diff --git a/test/boost_no_typename_with_ctor.ipp b/test/boost_no_typename_with_ctor.ipp new file mode 100644 index 00000000..f3e8679f --- /dev/null +++ b/test/boost_no_typename_with_ctor.ipp @@ -0,0 +1,26 @@ +// MACRO: BOOST_NO_TYPENAME_WITH_CTOR +// TITLE: Use of typename keyword with constructors +// DESCRIPTION: If the compiler rejects the typename keyword when calling +// the constructor of a dependent type + +namespace boost_no_typename_with_ctor { + +struct A {}; + +template +struct B { + typedef T type; +}; + +template +typename T::type f() { + return typename T::type(); +} + +int test() { + A a = f >(); + return 0; +} + +} + diff --git a/test/config_info.cpp b/test/config_info.cpp index 91e5fdcf..87b9aa9a 100644 --- a/test/config_info.cpp +++ b/test/config_info.cpp @@ -982,6 +982,7 @@ void print_boost_macros() PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATE_FRIENDS); PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATE_KEYWORD); PRINT_MACRO(BOOST_NO_MS_INT64_NUMERIC_LIMITS); + PRINT_MACRO(BOOST_NO_NESTED_FRIENDSHIP); PRINT_MACRO(BOOST_NO_OPERATORS_IN_NAMESPACE); PRINT_MACRO(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS); PRINT_MACRO(BOOST_NO_POINTER_TO_MEMBER_CONST); @@ -1010,6 +1011,7 @@ void print_boost_macros() PRINT_MACRO(BOOST_NO_TEMPLATE_TEMPLATES); PRINT_MACRO(BOOST_NO_TWO_PHASE_NAME_LOOKUP); PRINT_MACRO(BOOST_NO_TYPEID); + PRINT_MACRO(BOOST_NO_TYPENAME_WITH_CTOR); PRINT_MACRO(BOOST_NO_UNREACHABLE_RETURN_DETECTION); PRINT_MACRO(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE); PRINT_MACRO(BOOST_NO_USING_TEMPLATE); @@ -1034,6 +1036,8 @@ void print_boost_macros() + + diff --git a/test/config_test.cpp b/test/config_test.cpp index ef6faef0..876cd37c 100644 --- a/test/config_test.cpp +++ b/test/config_test.cpp @@ -1,4 +1,4 @@ -// This file was automatically generated on Mon Aug 25 10:51:52 2008 +// This file was automatically generated on Sat Sep 20 09:49:52 2008 // by libs/config/tools/generate.cpp // Copyright John Maddock 2002-4. // Use, modification and distribution are subject to the @@ -187,6 +187,11 @@ namespace boost_no_member_template_keyword = empty_boost; #else namespace boost_no_pointer_to_member_template_parameters = empty_boost; #endif +#ifndef BOOST_NO_NESTED_FRIENDSHIP +#include "boost_no_nested_friendship.ipp" +#else +namespace boost_no_nested_friendship = empty_boost; +#endif #ifndef BOOST_NO_OPERATORS_IN_NAMESPACE #include "boost_no_ops_in_namespace.ipp" #else @@ -322,6 +327,11 @@ namespace boost_no_two_phase_name_lookup = empty_boost; #else namespace boost_no_typeid = empty_boost; #endif +#ifndef BOOST_NO_TYPENAME_WITH_CTOR +#include "boost_no_typename_with_ctor.ipp" +#else +namespace boost_no_typename_with_ctor = empty_boost; +#endif #ifndef BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL #include "boost_no_using_breaks_adl.ipp" #else @@ -1026,6 +1036,11 @@ int main( int, char *[] ) std::cerr << "Failed test for BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS at: " << __FILE__ << ":" << __LINE__ << std::endl; ++error_count; } + if(0 != boost_no_nested_friendship::test()) + { + std::cerr << "Failed test for BOOST_NO_NESTED_FRIENDSHIP at: " << __FILE__ << ":" << __LINE__ << std::endl; + ++error_count; + } if(0 != boost_no_operators_in_namespace::test()) { std::cerr << "Failed test for BOOST_NO_OPERATORS_IN_NAMESPACE at: " << __FILE__ << ":" << __LINE__ << std::endl; @@ -1161,6 +1176,11 @@ int main( int, char *[] ) std::cerr << "Failed test for BOOST_NO_TYPEID at: " << __FILE__ << ":" << __LINE__ << std::endl; ++error_count; } + if(0 != boost_no_typename_with_ctor::test()) + { + std::cerr << "Failed test for BOOST_NO_TYPENAME_WITH_CTOR at: " << __FILE__ << ":" << __LINE__ << std::endl; + ++error_count; + } if(0 != boost_function_scope_using_declaration_breaks_adl::test()) { std::cerr << "Failed test for BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL at: " << __FILE__ << ":" << __LINE__ << std::endl; diff --git a/test/no_nested_friendship_fail.cpp b/test/no_nested_friendship_fail.cpp new file mode 100644 index 00000000..dd90e404 --- /dev/null +++ b/test/no_nested_friendship_fail.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Thu Sep 18 23:32:18 2008 +// 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_NESTED_FRIENDSHIP +// This file should not compile, if it does then +// BOOST_NO_NESTED_FRIENDSHIP should not be defined. +// See file boost_no_nested_friendship.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_NESTED_FRIENDSHIP +#include "boost_no_nested_friendship.ipp" +#else +#error "this file should not compile" +#endif + +int main( int, char *[] ) +{ + return boost_no_nested_friendship::test(); +} + diff --git a/test/no_nested_friendship_pass.cpp b/test/no_nested_friendship_pass.cpp new file mode 100644 index 00000000..3e114bc9 --- /dev/null +++ b/test/no_nested_friendship_pass.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Thu Sep 18 23:32:18 2008 +// 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_NESTED_FRIENDSHIP +// This file should compile, if it does not then +// BOOST_NO_NESTED_FRIENDSHIP should be defined. +// See file boost_no_nested_friendship.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_NESTED_FRIENDSHIP +#include "boost_no_nested_friendship.ipp" +#else +namespace boost_no_nested_friendship = empty_boost; +#endif + +int main( int, char *[] ) +{ + return boost_no_nested_friendship::test(); +} + diff --git a/test/no_typename_with_ctor_fail.cpp b/test/no_typename_with_ctor_fail.cpp new file mode 100644 index 00000000..74ee7b0e --- /dev/null +++ b/test/no_typename_with_ctor_fail.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Thu Sep 18 23:32:18 2008 +// 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_TYPENAME_WITH_CTOR +// This file should not compile, if it does then +// BOOST_NO_TYPENAME_WITH_CTOR should not be defined. +// See file boost_no_typename_with_ctor.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_TYPENAME_WITH_CTOR +#include "boost_no_typename_with_ctor.ipp" +#else +#error "this file should not compile" +#endif + +int main( int, char *[] ) +{ + return boost_no_typename_with_ctor::test(); +} + diff --git a/test/no_typename_with_ctor_pass.cpp b/test/no_typename_with_ctor_pass.cpp new file mode 100644 index 00000000..4a2d9bbc --- /dev/null +++ b/test/no_typename_with_ctor_pass.cpp @@ -0,0 +1,37 @@ +// This file was automatically generated on Thu Sep 18 23:32:18 2008 +// 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_TYPENAME_WITH_CTOR +// This file should compile, if it does not then +// BOOST_NO_TYPENAME_WITH_CTOR should be defined. +// See file boost_no_typename_with_ctor.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_TYPENAME_WITH_CTOR +#include "boost_no_typename_with_ctor.ipp" +#else +namespace boost_no_typename_with_ctor = empty_boost; +#endif + +int main( int, char *[] ) +{ + return boost_no_typename_with_ctor::test(); +} +