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_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();
+}
+
|