type_traits: updated type-transformations

[SVN r8777]
This commit is contained in:
John Maddock
2001-01-27 11:31:58 +00:00
parent 11f69e0ec0
commit de81a21597
7 changed files with 2787 additions and 384 deletions

View File

@@ -7,8 +7,9 @@ Compiler Status: win32
<body bgcolor="#ffffff" text="#000000">
<h1><img border border="0" src="../c++boost.gif" width="277" height="86"></h1>
<h1>Compiler Status: win32</h1>
</p>
<p><b>Run Date:</b> 01 Jan 2001 12:44 GMT</p>
<p><b>Run Date:</b> 26 Jan 2001 14:00 GMT</p>
<p><b>System Configuration:</b> Microsoft Windows 32bit</p>
<p>
<table border="1" cellspacing="0" cellpadding="5">
<tr>
@@ -20,7 +21,7 @@ Compiler Status: win32
<td>Microsoft<br>VC++<br>6.0 SP4<br>STLport<br>4.0</td>
</tr>
<tr>
<td><a href="libs/type_traits/alignment_test.cpp">libs/type_traits/alignment_test.cpp</a></td>
<td><a href="../libs/type_traits/alignment_test.cpp">libs/type_traits/alignment_test.cpp</a></td>
<td>run</td>
<td>Pass</td>
<td>Pass</td>
@@ -28,7 +29,7 @@ Compiler Status: win32
<td>Pass</td>
</tr>
<tr>
<td><a href="libs/type_traits/arithmetic_traits_test.cpp">libs/type_traits/arithmetic_traits_test.cpp</a></td>
<td><a href="../libs/type_traits/arithmetic_traits_test.cpp">libs/type_traits/arithmetic_traits_test.cpp</a></td>
<td>run</td>
<td>Pass</td>
<td>Pass</td>
@@ -36,7 +37,7 @@ Compiler Status: win32
<td>Pass</td>
</tr>
<tr>
<td><a href="libs/type_traits/composite_traits_test.cpp">libs/type_traits/composite_traits_test.cpp</a></td>
<td><a href="../libs/type_traits/composite_traits_test.cpp">libs/type_traits/composite_traits_test.cpp</a></td>
<td>run</td>
<td>Pass</td>
<td>Pass</td>
@@ -44,7 +45,7 @@ Compiler Status: win32
<td>Pass</td>
</tr>
<tr>
<td><a href="libs/type_traits/cv_traits_test.cpp">libs/type_traits/cv_traits_test.cpp</a></td>
<td><a href="../libs/type_traits/cv_traits_test.cpp">libs/type_traits/cv_traits_test.cpp</a></td>
<td>run</td>
<td>Pass</td>
<td>Pass</td>
@@ -52,7 +53,7 @@ Compiler Status: win32
<td>Pass</td>
</tr>
<tr>
<td><a href="libs/type_traits/is_convertible_test.cpp">libs/type_traits/is_convertible_test.cpp</a></td>
<td><a href="../libs/type_traits/is_convertible_test.cpp">libs/type_traits/is_convertible_test.cpp</a></td>
<td>run</td>
<td>Pass</td>
<td><font color="#FF0000">Fail</font></td>
@@ -60,7 +61,7 @@ Compiler Status: win32
<td>Pass</td>
</tr>
<tr>
<td><a href="libs/type_traits/is_same_test.cpp">libs/type_traits/is_same_test.cpp</a></td>
<td><a href="../libs/type_traits/is_same_test.cpp">libs/type_traits/is_same_test.cpp</a></td>
<td>run</td>
<td>Pass</td>
<td>Pass</td>
@@ -68,7 +69,7 @@ Compiler Status: win32
<td>Pass</td>
</tr>
<tr>
<td><a href="libs/type_traits/object_type_traits_test.cpp">libs/type_traits/object_type_traits_test.cpp</a></td>
<td><a href="../libs/type_traits/object_type_traits_test.cpp">libs/type_traits/object_type_traits_test.cpp</a></td>
<td>run</td>
<td>Pass</td>
<td>Pass</td>
@@ -76,15 +77,15 @@ Compiler Status: win32
<td>Pass</td>
</tr>
<tr>
<td><a href="libs/type_traits/transform_traits_test.cpp">libs/type_traits/transform_traits_test.cpp</a></td>
<td><a href="../libs/type_traits/transform_traits_test.cpp">libs/type_traits/transform_traits_test.cpp</a></td>
<td>run</td>
<td>Pass</td>
<td>Pass</td>
<td><font size="+3"><em>Pass</em></font></td>
<td><font color="#FF0000">Fail</font></td>
<td><font color="#FF0000">Fail</font></td>
<td><font color="#FF0000">Fail</font></td>
</tr>
<tr>
<td><a href="libs/type_traits/trivial_destructor_example.cpp">libs/type_traits/trivial_destructor_example.cpp</a></td>
<td><a href="../libs/type_traits/trivial_destructor_example.cpp">libs/type_traits/trivial_destructor_example.cpp</a></td>
<td>compile</td>
<td>Pass</td>
<td>Pass</td>
@@ -92,7 +93,7 @@ Compiler Status: win32
<td>Pass</td>
</tr>
<tr>
<td><a href="libs/type_traits/copy_example.cpp">libs/type_traits/copy_example.cpp</a></td>
<td><a href="../libs/type_traits/copy_example.cpp">libs/type_traits/copy_example.cpp</a></td>
<td>compile</td>
<td>Pass</td>
<td>Pass</td>
@@ -100,7 +101,7 @@ Compiler Status: win32
<td>Pass</td>
</tr>
<tr>
<td><a href="libs/type_traits/fill_example.cpp">libs/type_traits/fill_example.cpp</a></td>
<td><a href="../libs/type_traits/fill_example.cpp">libs/type_traits/fill_example.cpp</a></td>
<td>compile</td>
<td>Pass</td>
<td>Pass</td>
@@ -108,11 +109,15 @@ Compiler Status: win32
<td>Pass</td>
</tr>
<tr>
<td><a href="libs/type_traits/iter_swap_example.cpp">libs/type_traits/iter_swap_example.cpp</a></td>
<td><a href="../libs/type_traits/iter_swap_example.cpp">libs/type_traits/iter_swap_example.cpp</a></td>
<td>compile</td>
<td>Pass</td>
<td>Pass</td>
<td><font color="#FF0000">Fail</font></td>
<td><font color="#FF0000">Fail</font></td>
</tr>
</table>
</table></p>
<p>
</p>
</body>
</html>

View File

@@ -124,6 +124,8 @@ template <class T>
struct remove_bounds;
template <class T>
struct remove_pointer;
template <class T>
struct add_pointer;
// same_traits.hpp:
template <class T, class U>

View File

@@ -17,7 +17,7 @@
#ifndef BOOST_FWD_TYPE_TRAITS_HPP
#include <boost/type_traits/fwd.hpp>
#endif
#if !defined(COMPOSITE_TYPE_TRAITS_HPP) && defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
#if !defined(COMPOSITE_TYPE_TRAITS_HPP) && defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC)
#include <boost/type_traits/composite_traits.hpp>
#endif

View File

@@ -118,6 +118,15 @@ struct remove_bounds
template <typename T, std::size_t N>
struct remove_bounds<T[N]>
{ typedef T type; };
template <typename T, std::size_t N>
struct remove_bounds<const T[N]>
{ typedef const T type; };
template <typename T, std::size_t N>
struct remove_bounds<volatile T[N]>
{ typedef volatile T type; };
template <typename T, std::size_t N>
struct remove_bounds<const volatile T[N]>
{ typedef const volatile T type; };
#endif
/**********************************************
@@ -143,6 +152,42 @@ struct remove_pointer<T*const volatile>
{ typedef T type; };
#endif
/**********************************************
*
* add_pointer
*
**********************************************/
template <typename T>
struct add_pointer
{
private:
typedef typename remove_reference<T>::type no_ref_type;
typedef typename remove_bounds<no_ref_type>::type no_b_type;
public:
typedef no_b_type* type;
};
#ifdef __BORLANDC__
template <typename T, std::size_t N>
struct add_pointer<T (&)[N]>
{
typedef T* type;
};
template <typename T, std::size_t N>
struct add_pointer<T const (&)[N]>
{
typedef const T* type;
};
template <typename T, std::size_t N>
struct add_pointer<T volatile (&)[N]>
{
typedef volatile T* type;
};
template <typename T, std::size_t N>
struct add_pointer<T const volatile (&)[N]>
{
typedef const volatile T* type;
};
#endif
} // namespace boost

View File

@@ -119,6 +119,25 @@ struct type_checker<T,T>
#define type_test(v, x) type_checker<v,x>::check(#v, #x, #x);
#define type_test3(v, x, z) type_checker<v,x,z>::check(#v, #x "," #z, #x "," #z);
#define transform_check(name, from_suffix, to_suffix)\
type_test(bool to_suffix, name<bool from_suffix>::type);\
type_test(char to_suffix, name<char from_suffix>::type);\
type_test(wchar_t to_suffix, name<wchar_t from_suffix>::type);\
type_test(signed char to_suffix, name<signed char from_suffix>::type);\
type_test(unsigned char to_suffix, name<unsigned char from_suffix>::type);\
type_test(short to_suffix, name<short from_suffix>::type);\
type_test(unsigned short to_suffix, name<unsigned short from_suffix>::type);\
type_test(int to_suffix, name<int from_suffix>::type);\
type_test(unsigned int to_suffix, name<unsigned int from_suffix>::type);\
type_test(long to_suffix, name<long from_suffix>::type);\
type_test(unsigned long to_suffix, name<unsigned long from_suffix>::type);\
type_test(float to_suffix, name<float from_suffix>::type);\
type_test(long double to_suffix, name<long double from_suffix>::type);\
type_test(double to_suffix, name<double from_suffix>::type);\
type_test(UDT to_suffix, name<UDT from_suffix>::type);\
type_test(enum1 to_suffix, name<enum1 from_suffix>::type);
#define boost_dummy_macro_param
template <class T>
struct test_align
@@ -211,8 +230,8 @@ struct BOOST_TT_JOIN(nested_tester_,what){\
enum enum_UDT{ one, two, three };
struct UDT
{
UDT();
~UDT();
UDT(){};
~UDT(){};
UDT(const UDT&);
UDT& operator=(const UDT&);
int i;

File diff suppressed because it is too large Load Diff

View File

@@ -13,66 +13,358 @@
#endif
#include "boost/type_traits/type_traits_test.hpp"
//
// some of these tests, particularly those involving
// the use of the transform_check macro are tantamount
// to "compiler-abuse", and actually hide a *lot* of
// template test code. To prevent "Internal Compiler Error"
// type messages, we have to split these up into lots of
// separate functions:
#define BOOST_DECL_TRANSFORM_TEST(name, type, from, to)\
void name(){ transform_check(type, from, to) }
#define BOOST_DECL_TRANSFORM_TEST3(name, type, from)\
void name(){ transform_check(type, from, boost_dummy_macro_param) }
#define BOOST_DECL_TRANSFORM_TEST2(name, type)\
void name(){ transform_check(type, boost_dummy_macro_param, boost_dummy_macro_param) }
/***********************************************************************
*
* tests for remove_const:
*
**********************************************************************/
BOOST_DECL_TRANSFORM_TEST3(remove_const_test_1, ::boost::remove_const, const)
BOOST_DECL_TRANSFORM_TEST(remove_const_test_2, ::boost::remove_const, volatile, volatile)
BOOST_DECL_TRANSFORM_TEST(remove_const_test_3, ::boost::remove_const, const volatile, volatile)
BOOST_DECL_TRANSFORM_TEST2(remove_const_test_4, ::boost::remove_const)
BOOST_DECL_TRANSFORM_TEST(remove_const_test_6, ::boost::remove_const, *const, *)
BOOST_DECL_TRANSFORM_TEST(remove_const_test_7, ::boost::remove_const, *volatile, *volatile)
BOOST_DECL_TRANSFORM_TEST(remove_const_test_8, ::boost::remove_const, *const volatile, *volatile)
BOOST_DECL_TRANSFORM_TEST(remove_const_test_9, ::boost::remove_const, *, *)
BOOST_DECL_TRANSFORM_TEST(remove_const_test_11, ::boost::remove_const, volatile*, volatile*)
BOOST_DECL_TRANSFORM_TEST(remove_const_test_12, ::boost::remove_const, const[2], [2])
BOOST_DECL_TRANSFORM_TEST(remove_const_test_13, ::boost::remove_const, volatile[2], volatile[2])
BOOST_DECL_TRANSFORM_TEST(remove_const_test_14, ::boost::remove_const, const volatile[2], volatile[2])
BOOST_DECL_TRANSFORM_TEST(remove_const_test_15, ::boost::remove_const, [2], [2])
BOOST_DECL_TRANSFORM_TEST(remove_const_test_16, ::boost::remove_const, const*, const*)
BOOST_DECL_TRANSFORM_TEST(remove_const_test_17, ::boost::remove_const, const*const, const*)
void check_remove_const()
{
remove_const_test_1();
remove_const_test_2();
remove_const_test_3();
remove_const_test_4();
remove_const_test_6();
remove_const_test_7();
remove_const_test_8();
remove_const_test_9();
remove_const_test_11();
remove_const_test_12();
remove_const_test_13();
remove_const_test_14();
remove_const_test_15();
remove_const_test_16();
remove_const_test_17();
}
/***********************************************************************
*
* tests for remove_volatile:
*
**********************************************************************/
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_1, ::boost::remove_volatile, const, const)
BOOST_DECL_TRANSFORM_TEST3(remove_volatile_test_2, ::boost::remove_volatile, volatile)
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_3, ::boost::remove_volatile, const volatile, const)
BOOST_DECL_TRANSFORM_TEST2(remove_volatile_test_4, ::boost::remove_volatile)
BOOST_DECL_TRANSFORM_TEST2(remove_volatile_test_5, ::boost::remove_volatile)
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_6, ::boost::remove_volatile, *const, *const)
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_7, ::boost::remove_volatile, *volatile, *)
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_8, ::boost::remove_volatile, *const volatile, *const)
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_9, ::boost::remove_volatile, *, *)
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_10, ::boost::remove_volatile, *, *)
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_11, ::boost::remove_volatile, volatile*, volatile*)
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_12, ::boost::remove_volatile, const[2], const[2])
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_13, ::boost::remove_volatile, volatile[2], [2])
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_14, ::boost::remove_volatile, const volatile[2], const[2])
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_15, ::boost::remove_volatile, [2], [2])
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_16, ::boost::remove_volatile, const*, const*)
BOOST_DECL_TRANSFORM_TEST(remove_volatile_test_17, ::boost::remove_volatile, const*volatile, const*)
void check_remove_volatile()
{
remove_volatile_test_1();
remove_volatile_test_2();
remove_volatile_test_3();
remove_volatile_test_4();
remove_volatile_test_5();
remove_volatile_test_6();
remove_volatile_test_7();
remove_volatile_test_8();
remove_volatile_test_9();
remove_volatile_test_10();
remove_volatile_test_11();
remove_volatile_test_12();
remove_volatile_test_13();
remove_volatile_test_14();
remove_volatile_test_15();
remove_volatile_test_16();
remove_volatile_test_17();
}
/***********************************************************************
*
* tests for remove_cv:
*
**********************************************************************/
BOOST_DECL_TRANSFORM_TEST3(remove_cv_test_1, ::boost::remove_cv, const)
BOOST_DECL_TRANSFORM_TEST3(remove_cv_test_2, ::boost::remove_cv, volatile)
BOOST_DECL_TRANSFORM_TEST3(remove_cv_test_3, ::boost::remove_cv, const volatile)
BOOST_DECL_TRANSFORM_TEST2(remove_cv_test_4, ::boost::remove_cv)
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_5, ::boost::remove_cv, const &, const&)
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_6, ::boost::remove_cv, *const, *)
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_7, ::boost::remove_cv, *volatile, *)
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_8, ::boost::remove_cv, *const volatile, *)
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_9, ::boost::remove_cv, *, *)
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_10, ::boost::remove_cv, const*, const*)
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_11, ::boost::remove_cv, volatile*, volatile*)
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_12, ::boost::remove_cv, const[2], [2])
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_13, ::boost::remove_cv, volatile[2], [2])
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_14, ::boost::remove_cv, const volatile[2], [2])
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_15, ::boost::remove_cv, [2], [2])
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_16, ::boost::remove_cv, const*, const*)
BOOST_DECL_TRANSFORM_TEST(remove_cv_test_17, ::boost::remove_cv, const*volatile, const*)
void check_remove_cv()
{
remove_cv_test_1();
remove_cv_test_2();
remove_cv_test_3();
remove_cv_test_4();
remove_cv_test_5();
remove_cv_test_6();
remove_cv_test_7();
remove_cv_test_8();
remove_cv_test_9();
remove_cv_test_10();
remove_cv_test_11();
remove_cv_test_12();
remove_cv_test_13();
remove_cv_test_14();
remove_cv_test_15();
remove_cv_test_16();
remove_cv_test_17();
}
/***********************************************************************
*
* tests for remove_reference:
*
**********************************************************************/
BOOST_DECL_TRANSFORM_TEST(remove_reference_test_1, ::boost::remove_reference, const, const)
BOOST_DECL_TRANSFORM_TEST(remove_reference_test_2, ::boost::remove_reference, volatile, volatile)
BOOST_DECL_TRANSFORM_TEST3(remove_reference_test_3, ::boost::remove_reference, &)
BOOST_DECL_TRANSFORM_TEST2(remove_reference_test_4, ::boost::remove_reference)
BOOST_DECL_TRANSFORM_TEST(remove_reference_test_5, ::boost::remove_reference, const &, const)
BOOST_DECL_TRANSFORM_TEST(remove_reference_test_6, ::boost::remove_reference, *, *)
BOOST_DECL_TRANSFORM_TEST(remove_reference_test_7, ::boost::remove_reference, *volatile, *volatile)
BOOST_DECL_TRANSFORM_TEST3(remove_reference_test_8, ::boost::remove_reference, &)
BOOST_DECL_TRANSFORM_TEST(remove_reference_test_9, ::boost::remove_reference, const &, const)
BOOST_DECL_TRANSFORM_TEST(remove_reference_test_10, ::boost::remove_reference, const*, const*)
BOOST_DECL_TRANSFORM_TEST(remove_reference_test_11, ::boost::remove_reference, volatile*, volatile*)
BOOST_DECL_TRANSFORM_TEST(remove_reference_test_12, ::boost::remove_reference, const[2], const[2])
BOOST_DECL_TRANSFORM_TEST(remove_reference_test_13, ::boost::remove_reference, (&)[2], [2])
void check_remove_reference()
{
remove_reference_test_1();
remove_reference_test_2();
remove_reference_test_3();
remove_reference_test_4();
remove_reference_test_5();
remove_reference_test_6();
remove_reference_test_7();
remove_reference_test_8();
remove_reference_test_9();
remove_reference_test_10();
remove_reference_test_11();
remove_reference_test_12();
remove_reference_test_13();
}
/***********************************************************************
*
* tests for remove_bounds:
*
**********************************************************************/
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_1, ::boost::remove_bounds, const, const)
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_2, ::boost::remove_bounds, volatile, volatile)
BOOST_DECL_TRANSFORM_TEST3(remove_bounds_test_3, ::boost::remove_bounds, [2])
BOOST_DECL_TRANSFORM_TEST2(remove_bounds_test_4, ::boost::remove_bounds)
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_5, ::boost::remove_bounds, const &, const&)
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_6, ::boost::remove_bounds, *, *)
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_7, ::boost::remove_bounds, *volatile, *volatile)
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_8, ::boost::remove_bounds, const [2], const)
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_9, ::boost::remove_bounds, const &, const&)
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_10, ::boost::remove_bounds, const*, const*)
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_11, ::boost::remove_bounds, volatile*, volatile*)
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_12, ::boost::remove_bounds, const[2][3], const[3])
BOOST_DECL_TRANSFORM_TEST(remove_bounds_test_13, ::boost::remove_bounds, (&)[2], (&)[2])
void check_remove_bounds()
{
remove_bounds_test_1();
remove_bounds_test_2();
remove_bounds_test_3();
remove_bounds_test_4();
remove_bounds_test_5();
remove_bounds_test_6();
remove_bounds_test_7();
remove_bounds_test_8();
remove_bounds_test_9();
remove_bounds_test_10();
remove_bounds_test_11();
remove_bounds_test_12();
remove_bounds_test_13();
}
/***********************************************************************
*
* tests for remove_pointer:
*
**********************************************************************/
BOOST_DECL_TRANSFORM_TEST(remove_pointer_test_1, ::boost::remove_pointer, const, const)
BOOST_DECL_TRANSFORM_TEST(remove_pointer_test_2, ::boost::remove_pointer, volatile, volatile)
BOOST_DECL_TRANSFORM_TEST3(remove_pointer_test_3, ::boost::remove_pointer, *)
BOOST_DECL_TRANSFORM_TEST2(remove_pointer_test_4, ::boost::remove_pointer)
BOOST_DECL_TRANSFORM_TEST(remove_pointer_test_5, ::boost::remove_pointer, const &, const&)
BOOST_DECL_TRANSFORM_TEST(remove_pointer_test_6, ::boost::remove_pointer, &, &)
BOOST_DECL_TRANSFORM_TEST3(remove_pointer_test_7, ::boost::remove_pointer, *volatile)
BOOST_DECL_TRANSFORM_TEST(remove_pointer_test_8, ::boost::remove_pointer, const [2], const[2])
BOOST_DECL_TRANSFORM_TEST(remove_pointer_test_9, ::boost::remove_pointer, const &, const&)
BOOST_DECL_TRANSFORM_TEST(remove_pointer_test_10, ::boost::remove_pointer, const*, const)
BOOST_DECL_TRANSFORM_TEST(remove_pointer_test_11, ::boost::remove_pointer, volatile*, volatile)
BOOST_DECL_TRANSFORM_TEST(remove_pointer_test_12, ::boost::remove_pointer, const[2][3], const[2][3])
BOOST_DECL_TRANSFORM_TEST(remove_pointer_test_13, ::boost::remove_pointer, (&)[2], (&)[2])
void check_remove_pointer()
{
remove_pointer_test_1();
remove_pointer_test_2();
remove_pointer_test_3();
remove_pointer_test_4();
remove_pointer_test_5();
remove_pointer_test_6();
remove_pointer_test_7();
remove_pointer_test_8();
remove_pointer_test_9();
remove_pointer_test_10();
remove_pointer_test_11();
remove_pointer_test_12();
remove_pointer_test_13();
}
/***********************************************************************
*
* tests for add_reference:
*
**********************************************************************/
BOOST_DECL_TRANSFORM_TEST(add_reference_test_1, ::boost::add_reference, const, const&)
BOOST_DECL_TRANSFORM_TEST(add_reference_test_2, ::boost::add_reference, volatile, volatile&)
BOOST_DECL_TRANSFORM_TEST(add_reference_test_3, ::boost::add_reference, *, *&)
//BOOST_DECL_TRANSFORM_TEST2(add_reference_test_4, ::boost::add_reference)
BOOST_DECL_TRANSFORM_TEST(add_reference_test_5, ::boost::add_reference, const &, const&)
BOOST_DECL_TRANSFORM_TEST(add_reference_test_6, ::boost::add_reference, &, &)
BOOST_DECL_TRANSFORM_TEST(add_reference_test_7, ::boost::add_reference, *volatile, *volatile&)
BOOST_DECL_TRANSFORM_TEST(add_reference_test_8, ::boost::add_reference, const [2], const (&)[2])
BOOST_DECL_TRANSFORM_TEST(add_reference_test_9, ::boost::add_reference, const &, const&)
BOOST_DECL_TRANSFORM_TEST(add_reference_test_10, ::boost::add_reference, const*, const*&)
BOOST_DECL_TRANSFORM_TEST(add_reference_test_11, ::boost::add_reference, volatile*, volatile*&)
BOOST_DECL_TRANSFORM_TEST(add_reference_test_12, ::boost::add_reference, const[2][3], const (&)[2][3])
BOOST_DECL_TRANSFORM_TEST(add_reference_test_13, ::boost::add_reference, (&)[2], (&)[2])
void check_add_reference()
{
add_reference_test_1();
add_reference_test_2();
add_reference_test_3();
//add_reference_test_4();
add_reference_test_5();
add_reference_test_6();
add_reference_test_7();
add_reference_test_8();
add_reference_test_9();
add_reference_test_10();
add_reference_test_11();
add_reference_test_12();
add_reference_test_13();
}
/***********************************************************************
*
* tests for add_pointer:
*
**********************************************************************/
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_1, ::boost::add_pointer, const, const*)
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_2, ::boost::add_pointer, volatile, volatile*)
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_3, ::boost::add_pointer, *, **)
//BOOST_DECL_TRANSFORM_TEST2(add_pointer_test_4, ::boost::add_pointer)
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_5, ::boost::add_pointer, const &, const*)
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_6, ::boost::add_pointer, &, *)
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_7, ::boost::add_pointer, *volatile, *volatile*)
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_8, ::boost::add_pointer, const [2], const *)
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_9, ::boost::add_pointer, const &, const*)
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_10, ::boost::add_pointer, const*, const**)
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_11, ::boost::add_pointer, volatile*, volatile**)
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_12, ::boost::add_pointer, const[2][3], const (*)[3])
BOOST_DECL_TRANSFORM_TEST(add_pointer_test_13, ::boost::add_pointer, (&)[2], *)
void check_add_pointer()
{
add_pointer_test_1();
add_pointer_test_2();
add_pointer_test_3();
//add_pointer_test_4();
add_pointer_test_5();
add_pointer_test_6();
add_pointer_test_7();
add_pointer_test_8();
add_pointer_test_9();
add_pointer_test_10();
add_pointer_test_11();
add_pointer_test_12();
add_pointer_test_13();
}
int main(int argc, char* argv[])
{
type_test(int, boost::remove_const<const int>::type)
type_test(volatile int, boost::remove_const<volatile int>::type)
type_test(volatile int, boost::remove_const<const volatile int>::type)
type_test(int, boost::remove_const<int>::type)
type_test(int*, boost::remove_const<int* const>::type)
type_test(void, boost::remove_const<const void>::type)
check_remove_const();
check_remove_volatile();
check_remove_cv();
check_remove_reference();
check_remove_bounds();
check_remove_pointer();
check_add_reference();
check_add_pointer();
type_test(void, boost::remove_const<void>::type)
type_test(int, boost::remove_volatile<volatile int>::type)
type_test(const int, boost::remove_volatile<const int>::type)
type_test(const int, boost::remove_volatile<const volatile int>::type)
type_test(int, boost::remove_volatile<int>::type)
type_test(int*, boost::remove_volatile<int* volatile>::type)
type_test(void, boost::remove_volatile<volatile void>::type)
type_test(void, boost::remove_volatile<void>::type)
type_test(int, boost::remove_cv<volatile int>::type)
type_test(int, boost::remove_cv<const int>::type)
type_test(int, boost::remove_cv<const volatile int>::type)
type_test(int, boost::remove_cv<int>::type)
type_test(int*, boost::remove_cv<int* volatile>::type)
type_test(int*, boost::remove_cv<int* const>::type)
type_test(int*, boost::remove_cv<int* const volatile>::type)
type_test(const int *, boost::remove_cv<const int * const>::type)
type_test(void, boost::remove_cv<volatile void>::type)
type_test(void, boost::remove_cv<void>::type)
type_test(int, boost::remove_reference<int>::type)
type_test(const int, boost::remove_reference<const int>::type)
type_test(int, boost::remove_reference<int&>::type)
type_test(const int, boost::remove_reference<const int&>::type)
type_test(volatile int, boost::remove_reference<volatile int&>::type)
type_test(int, boost::remove_reference<cr_type>::type)
type_test(void, boost::remove_reference<void>::type)
type_test(int, boost::remove_bounds<int>::type)
type_test(int*, boost::remove_bounds<int*>::type)
type_test(int, boost::remove_bounds<int[3]>::type)
type_test(void, boost::remove_bounds<void>::type)
type_test(int[3], boost::remove_bounds<int[2][3]>::type)
type_test(int, boost::remove_pointer<int>::type)
type_test(int, boost::remove_pointer<int*>::type)
type_test(const int, boost::remove_pointer<const int*>::type)
type_test(int, boost::remove_pointer<int*const>::type)
type_test(volatile int, boost::remove_pointer<volatile int*const volatile>::type)
type_test(int[3], boost::remove_pointer<int[3]>::type)
type_test(int[2][3], boost::remove_pointer<int[2][3]>::type)
type_test(void, boost::remove_pointer<void>::type)
type_test(int&, boost::add_reference<int>::type)
type_test(const int&, boost::add_reference<const int>::type)
#if defined(BOOST_MSVC6_MEMBER_TEMPLATES) || !defined(BOOST_NO_MEMBER_TEMPLATES)
type_test(int&, boost::add_reference<int&>::type)
type_test(const int&, boost::add_reference<const int&>::type)
#endif
return check_result(argc, argv);
}
@@ -87,3 +379,4 @@ unsigned int expected_failures = 0;
#endif