minor compiler compatability fixes

[SVN r7661]
This commit is contained in:
John Maddock 2000-07-29 11:39:42 +00:00
parent 767b61a254
commit e52916acf2
3 changed files with 61 additions and 39 deletions

View File

@ -295,37 +295,47 @@ int main()
template <typename T, bool isarray = false> template <typename T, bool isarray = false>
struct call_traits_test struct call_traits_test
{ {
static void assert_construct(boost::call_traits<T>::param_type val); typedef ::boost::call_traits<T> ct;
typedef typename ct::param_type param_type;
typedef typename ct::reference reference;
typedef typename ct::const_reference const_reference;
typedef typename ct::value_type value_type;
static void assert_construct(param_type val);
}; };
template <typename T, bool isarray> template <typename T, bool isarray>
void call_traits_test<T, isarray>::assert_construct(boost::call_traits<T>::param_type val) void call_traits_test<T, isarray>::assert_construct(typename call_traits_test<T, isarray>::param_type val)
{ {
// //
// this is to check that the call_traits assertions are valid: // this is to check that the call_traits assertions are valid:
T t(val); T t(val);
boost::call_traits<T>::value_type v(t); value_type v(t);
boost::call_traits<T>::reference r(t); reference r(t);
boost::call_traits<T>::const_reference cr(t); const_reference cr(t);
boost::call_traits<T>::param_type p(t); param_type p(t);
boost::call_traits<T>::value_type v2(v); value_type v2(v);
boost::call_traits<T>::value_type v3(r); value_type v3(r);
boost::call_traits<T>::value_type v4(p); value_type v4(p);
boost::call_traits<T>::reference r2(v); reference r2(v);
boost::call_traits<T>::reference r3(r); reference r3(r);
boost::call_traits<T>::const_reference cr2(v); const_reference cr2(v);
boost::call_traits<T>::const_reference cr3(r); const_reference cr3(r);
boost::call_traits<T>::const_reference cr4(cr); const_reference cr4(cr);
boost::call_traits<T>::const_reference cr5(p); const_reference cr5(p);
boost::call_traits<T>::param_type p2(v); param_type p2(v);
boost::call_traits<T>::param_type p3(r); param_type p3(r);
boost::call_traits<T>::param_type p4(p); param_type p4(p);
} }
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <typename T> template <typename T>
struct call_traits_test<T, true> struct call_traits_test<T, true>
{ {
static void assert_construct(boost::call_traits<T>::param_type val); typedef ::boost::call_traits<T> ct;
typedef typename ct::param_type param_type;
typedef typename ct::reference reference;
typedef typename ct::const_reference const_reference;
typedef typename ct::value_type value_type;
static void assert_construct(param_type val);
}; };
template <typename T> template <typename T>
@ -334,23 +344,23 @@ void call_traits_test<T, true>::assert_construct(boost::call_traits<T>::param_ty
// //
// this is to check that the call_traits assertions are valid: // this is to check that the call_traits assertions are valid:
T t; T t;
boost::call_traits<T>::value_type v(t); value_type v(t);
boost::call_traits<T>::value_type v5(val); value_type v5(val);
boost::call_traits<T>::reference r = t; reference r = t;
boost::call_traits<T>::const_reference cr = t; const_reference cr = t;
boost::call_traits<T>::reference r2 = r; reference r2 = r;
#ifndef __BORLANDC__ #ifndef __BORLANDC__
// C++ Builder buglet: // C++ Builder buglet:
boost::call_traits<T>::const_reference cr2 = r; const_reference cr2 = r;
#endif #endif
boost::call_traits<T>::param_type p(t); param_type p(t);
boost::call_traits<T>::value_type v2(v); value_type v2(v);
boost::call_traits<T>::const_reference cr3 = cr; const_reference cr3 = cr;
boost::call_traits<T>::value_type v3(r); value_type v3(r);
boost::call_traits<T>::value_type v4(p); value_type v4(p);
boost::call_traits<T>::param_type p2(v); param_type p2(v);
boost::call_traits<T>::param_type p3(r); param_type p3(r);
boost::call_traits<T>::param_type p4(p); param_type p4(p);
} }
#endif //BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION #endif //BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION

View File

@ -1,9 +1,3 @@
// boost::compressed_pair test program
// (C) Copyright John Maddock 2000. Permission to copy, use, modify, sell and
// distribute this software is granted provided this copyright notice appears
// in all copies. This software is provided "as is" without express or implied
// warranty, and with no claim as to its suitability for any purpose.
#include <iostream> #include <iostream>
#include <typeinfo> #include <typeinfo>
@ -24,6 +18,7 @@ unsigned test_count = 0;
#define value_test(v, x) ++test_count;\ #define value_test(v, x) ++test_count;\
if(v != x){++failures; std::cout << "checking value of " << #x << "...failed" << std::endl;} if(v != x){++failures; std::cout << "checking value of " << #x << "...failed" << std::endl;}
#define value_fail(v, x) ++test_count; ++failures; std::cout << "checking value of " << #x << "...failed" << std::endl;
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#define type_test(v, x) ++test_count;\ #define type_test(v, x) ++test_count;\
@ -110,12 +105,21 @@ int main()
// //
// instanciate some compressed pairs: // instanciate some compressed pairs:
#ifdef __MWERKS__
template class compressed_pair<int, double>;
template class compressed_pair<int, int>;
template class compressed_pair<empty_UDT, int>;
template class compressed_pair<int, empty_UDT>;
template class compressed_pair<empty_UDT, empty_UDT>;
template class compressed_pair<empty_UDT, empty_POD_UDT>;
#else
template class boost::compressed_pair<int, double>; template class boost::compressed_pair<int, double>;
template class boost::compressed_pair<int, int>; template class boost::compressed_pair<int, int>;
template class boost::compressed_pair<empty_UDT, int>; template class boost::compressed_pair<empty_UDT, int>;
template class boost::compressed_pair<int, empty_UDT>; template class boost::compressed_pair<int, empty_UDT>;
template class boost::compressed_pair<empty_UDT, empty_UDT>; template class boost::compressed_pair<empty_UDT, empty_UDT>;
template class boost::compressed_pair<empty_UDT, empty_POD_UDT>; template class boost::compressed_pair<empty_UDT, empty_POD_UDT>;
#endif
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
// //
@ -127,12 +131,14 @@ template compressed_pair<double, int&>::compressed_pair(int&);
template compressed_pair<double, int&>::compressed_pair(call_traits<double>::param_type,int&); template compressed_pair<double, int&>::compressed_pair(call_traits<double>::param_type,int&);
// //
// and then arrays: // and then arrays:
#ifndef __MWERKS__
#ifndef __BORLANDC__ #ifndef __BORLANDC__
template call_traits<int[2]>::reference compressed_pair<double, int[2]>::second(); template call_traits<int[2]>::reference compressed_pair<double, int[2]>::second();
#endif #endif
template call_traits<double>::reference compressed_pair<double, int[2]>::first(); template call_traits<double>::reference compressed_pair<double, int[2]>::first();
template compressed_pair<double, int[2]>::compressed_pair(const double&); template compressed_pair<double, int[2]>::compressed_pair(const double&);
template compressed_pair<double, int[2]>::compressed_pair(); template compressed_pair<double, int[2]>::compressed_pair();
#endif // __MWERKS__
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION

View File

@ -30,6 +30,7 @@ unsigned test_count = 0;
#define value_test(v, x) ++test_count;\ #define value_test(v, x) ++test_count;\
if(v != x){++failures; std::cout << "checking value of " << #x << "...failed" << std::endl;} if(v != x){++failures; std::cout << "checking value of " << #x << "...failed" << std::endl;}
#define value_fail(v, x) ++test_count; ++failures; std::cout << "checking value of " << #x << "...failed" << std::endl;
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#define type_test(v, x) ++test_count;\ #define type_test(v, x) ++test_count;\
if(is_same<v, x>::value == false){\ if(is_same<v, x>::value == false){\
@ -438,7 +439,12 @@ int main()
value_test(false, is_empty<int>::value) value_test(false, is_empty<int>::value)
value_test(false, is_empty<int*>::value) value_test(false, is_empty<int*>::value)
value_test(false, is_empty<int&>::value) value_test(false, is_empty<int&>::value)
#ifdef __MWERKS__
// apparent compiler bug causes this to fail to compile:
value_fail(false, is_empty<int[2]>::value)
#else
value_test(false, is_empty<int[2]>::value) value_test(false, is_empty<int[2]>::value)
#endif
value_test(false, is_empty<f1>::value) value_test(false, is_empty<f1>::value)
value_test(false, is_empty<mf1>::value) value_test(false, is_empty<mf1>::value)
value_test(false, is_empty<UDT>::value) value_test(false, is_empty<UDT>::value)