Additional Codegear support macros and configuration.

[SVN r48893]
This commit is contained in:
John Maddock
2008-09-19 12:00:14 +00:00
parent 5194a3bad7
commit 525c53434b
8 changed files with 86 additions and 15 deletions

View File

@ -171,6 +171,10 @@ There is no specialization for `numeric_limits<__int64>` and
specializations as a standard library "fix", only if the compiler supports specializations as a standard library "fix", only if the compiler supports
the `__int64` datatype. 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][ [[`BOOST_NO_OPERATORS_IN_NAMESPACE`][Compiler][
Compiler requires inherited operator friend functions to be defined at Compiler requires inherited operator friend functions to be defined at
namespace scope, then using'ed to boost. Probably GCC specific. See 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][ [[`BOOST_NO_TYPEID`][Compiler][
The compiler does not support the typeid operator at all. 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][ [[`BOOST_NO_UNREACHABLE_RETURN_DETECTION`][Compiler][
If a return is unreachable, then no return statement should be required, 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 however some compilers insist on it, while other issue a bunch of warnings

View File

@ -40,10 +40,11 @@
// we shouldn't really need this - but too many things choke // we shouldn't really need this - but too many things choke
// without it, this needs more investigation: // without it, this needs more investigation:
# define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS # 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 // Temporary hack, until specific MPL preprocessed headers are generated
// # define BOOST_NO_TYPENAME_WITH_CTOR // Cannot use typename keyword when making temporaries of a dependant type # define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
// # define BOOST_NO_NESTED_FRIENDSHIP // TC1 gives nested classes access rights as any other member
# ifdef NDEBUG # ifdef NDEBUG
// fix broken <cstring> so that Boost.test works: // fix broken <cstring> so that Boost.test works:

View File

@ -442,6 +442,12 @@ namespace std {
# define BOOST_DEDUCED_TYPENAME # define BOOST_DEDUCED_TYPENAME
#endif #endif
#ifndef BOOST_NO_TYPENAME_WITH_CTOR
# define BOOST_CTOR_TYPENAME typename
#else
# define BOOST_CTOR_TYPENAME
#endif
// long long workaround ------------------------------------------// // long long workaround ------------------------------------------//
// On gcc (and maybe other compilers?) long long is alway supported // On gcc (and maybe other compilers?) long long is alway supported
// but it's use may generate either warnings (with -ansi), or errors // but it's use may generate either warnings (with -ansi), or errors

View File

@ -1,7 +1,7 @@
# #
# Regression test Jamfile for boost configuration setup. # Regression test Jamfile for boost configuration setup.
# *** DO NOT EDIT THIS FILE BY HAND *** # *** 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 Thu Sep 18 23:32:18 2008
# by libs/config/tools/generate.cpp # by libs/config/tools/generate.cpp
# Copyright John Maddock. # Copyright John Maddock.
# Use, modification and distribution are subject to the # 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" : test-suite "BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS" :
[ run ../no_mem_tem_pnts_pass.cpp ] [ run ../no_mem_tem_pnts_pass.cpp ]
[ compile-fail ../no_mem_tem_pnts_fail.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" : test-suite "BOOST_NO_OPERATORS_IN_NAMESPACE" :
[ run ../no_ops_in_namespace_pass.cpp ] [ run ../no_ops_in_namespace_pass.cpp ]
[ compile-fail ../no_ops_in_namespace_fail.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" : test-suite "BOOST_NO_TYPEID" :
[ run ../no_typeid_pass.cpp ] [ run ../no_typeid_pass.cpp ]
[ compile-fail ../no_typeid_fail.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" : test-suite "BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL" :
[ run ../no_using_breaks_adl_pass.cpp ] [ run ../no_using_breaks_adl_pass.cpp ]
[ compile-fail ../no_using_breaks_adl_fail.cpp ] ; [ compile-fail ../no_using_breaks_adl_fail.cpp ] ;

View File

@ -12,11 +12,18 @@
namespace boost_no_is_abstract{ namespace boost_no_is_abstract{
#if defined(__CODEGEARC__)
template<class T> template<class T>
struct is_abstract_test struct is_abstract_test
{ {
// Deduction fails if T is void, function type, enum{ value = __is_abstract(T) };
// reference type (14.8.2/2)or an abstract class type };
#else
template<class T>
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 // according to review status issue #337
// //
template<class U> template<class U>
@ -29,9 +36,10 @@ struct is_abstract_test
#else #else
enum{ s1 = sizeof(check_sig<T>(0)) }; enum{ s1 = sizeof(check_sig<T>(0)) };
#endif #endif
enum{ value = (s1 == sizeof(char)) }; enum{ value = (s1 == sizeof(char)) };
}; };
#endif
struct non_abstract{}; struct non_abstract{};
struct abstract{ virtual void foo() = 0; }; struct abstract{ virtual void foo() = 0; };
@ -43,10 +51,3 @@ int test()
} }

View File

@ -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 <typename T>
struct B {
typedef T type;
};
template <typename T>
typename T::type f() {
return typename T::type();
}
int test() {
A a = f<B<A> >();
return 0;
}
}

View File

@ -982,6 +982,7 @@ void print_boost_macros()
PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATE_FRIENDS); PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATE_FRIENDS);
PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATE_KEYWORD); PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATE_KEYWORD);
PRINT_MACRO(BOOST_NO_MS_INT64_NUMERIC_LIMITS); 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_OPERATORS_IN_NAMESPACE);
PRINT_MACRO(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS); PRINT_MACRO(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS);
PRINT_MACRO(BOOST_NO_POINTER_TO_MEMBER_CONST); 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_TEMPLATE_TEMPLATES);
PRINT_MACRO(BOOST_NO_TWO_PHASE_NAME_LOOKUP); PRINT_MACRO(BOOST_NO_TWO_PHASE_NAME_LOOKUP);
PRINT_MACRO(BOOST_NO_TYPEID); PRINT_MACRO(BOOST_NO_TYPEID);
PRINT_MACRO(BOOST_NO_TYPENAME_WITH_CTOR);
PRINT_MACRO(BOOST_NO_UNREACHABLE_RETURN_DETECTION); PRINT_MACRO(BOOST_NO_UNREACHABLE_RETURN_DETECTION);
PRINT_MACRO(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE); PRINT_MACRO(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE);
PRINT_MACRO(BOOST_NO_USING_TEMPLATE); PRINT_MACRO(BOOST_NO_USING_TEMPLATE);
@ -1035,6 +1037,7 @@ void print_boost_macros()
// END GENERATED BLOCK // END GENERATED BLOCK

View File

@ -1,4 +1,4 @@
// This file was automatically generated on Mon Aug 25 10:51:52 2008 // This file was automatically generated on Thu Sep 18 23:32:18 2008
// by libs/config/tools/generate.cpp // by libs/config/tools/generate.cpp
// Copyright John Maddock 2002-4. // Copyright John Maddock 2002-4.
// Use, modification and distribution are subject to the // Use, modification and distribution are subject to the
@ -187,6 +187,11 @@ namespace boost_no_member_template_keyword = empty_boost;
#else #else
namespace boost_no_pointer_to_member_template_parameters = empty_boost; namespace boost_no_pointer_to_member_template_parameters = empty_boost;
#endif #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 #ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
#include "boost_no_ops_in_namespace.ipp" #include "boost_no_ops_in_namespace.ipp"
#else #else
@ -322,6 +327,11 @@ namespace boost_no_two_phase_name_lookup = empty_boost;
#else #else
namespace boost_no_typeid = empty_boost; namespace boost_no_typeid = empty_boost;
#endif #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 #ifndef BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
#include "boost_no_using_breaks_adl.ipp" #include "boost_no_using_breaks_adl.ipp"
#else #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; std::cerr << "Failed test for BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count; ++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()) if(0 != boost_no_operators_in_namespace::test())
{ {
std::cerr << "Failed test for BOOST_NO_OPERATORS_IN_NAMESPACE at: " << __FILE__ << ":" << __LINE__ << std::endl; 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; std::cerr << "Failed test for BOOST_NO_TYPEID at: " << __FILE__ << ":" << __LINE__ << std::endl;
++error_count; ++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()) 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; std::cerr << "Failed test for BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL at: " << __FILE__ << ":" << __LINE__ << std::endl;