diff options
author | Paolo Carlini <pcarlini@suse.de> | 2004-12-10 11:45:13 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2004-12-10 11:45:13 +0000 |
commit | d5f60056f02a4f2bb7201f05224de907c9c234c4 (patch) | |
tree | bee7128346fb6c7dbb1cbaf65c5fc8733e81e990 | |
parent | 72b4c734a3d08ba4a9b11345b06118899ff5c6a6 (diff) | |
download | gcc-d5f60056f02a4f2bb7201f05224de907c9c234c4.zip gcc-d5f60056f02a4f2bb7201f05224de907c9c234c4.tar.gz gcc-d5f60056f02a4f2bb7201f05224de907c9c234c4.tar.bz2 |
type_traits: Implement remove_const, remove_volatile, and remove_cv.
2004-12-10 Paolo Carlini <pcarlini@suse.de>
* include/tr1/type_traits: Implement remove_const, remove_volatile,
and remove_cv.
* testsuite/tr1/4_metaprogramming/const_volatile_modifications/
remove_const.cc: New.
* testsuite/tr1/4_metaprogramming/const_volatile_modifications/
remove_cv.cc: Likewise.
* testsuite/tr1/4_metaprogramming/const_volatile_modifications/
remove_volatile.cc: Likewise.
* testsuite/tr1/4_metaprogramming/primary_type_categories/
is_array/is_array.cc: Slightly tweak consistently, remove typedefs,
add a few tests.
From-SVN: r91990
6 files changed, 194 insertions, 16 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 4e510e9..f4ddc1c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,18 @@ +2004-12-10 Paolo Carlini <pcarlini@suse.de> + + * include/tr1/type_traits: Implement remove_const, remove_volatile, + and remove_cv. + * testsuite/tr1/4_metaprogramming/const_volatile_modifications/ + remove_const.cc: New. + * testsuite/tr1/4_metaprogramming/const_volatile_modifications/ + remove_cv.cc: Likewise. + * testsuite/tr1/4_metaprogramming/const_volatile_modifications/ + remove_volatile.cc: Likewise. + + * testsuite/tr1/4_metaprogramming/primary_type_categories/ + is_array/is_array.cc: Slightly tweak consistently, remove typedefs, + add a few tests. + 2004-12-09 Paolo Carlini <pcarlini@suse.de> * include/tr1/type_traits: Implement remove_extent and diff --git a/libstdc++-v3/include/tr1/type_traits b/libstdc++-v3/include/tr1/type_traits index 6b698b0..13d7ebd 100644 --- a/libstdc++-v3/include/tr1/type_traits +++ b/libstdc++-v3/include/tr1/type_traits @@ -256,13 +256,35 @@ namespace tr1 /// @brief const-volatile modifications [4.7.1]. template<typename _Tp> - struct remove_const; + struct remove_const + { + typedef _Tp type; + }; + + template<typename _Tp> + struct remove_const<_Tp const> + { + typedef _Tp type; + }; template<typename _Tp> - struct remove_volatile; + struct remove_volatile + { + typedef _Tp type; + }; + + template<typename _Tp> + struct remove_volatile<_Tp volatile> + { + typedef _Tp type; + }; template<typename _Tp> - struct remove_cv; + struct remove_cv + { + typedef typename + remove_const<typename remove_volatile<_Tp>::type>::type type; + }; template<typename _Tp> struct add_const; diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_const.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_const.cc new file mode 100644 index 0000000..1def556 --- /dev/null +++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_const.cc @@ -0,0 +1,47 @@ +// 2004-12-10 Paolo Carlini <pcarlini@suse.de> +// +// Copyright (C) 2004 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 4.7.1 Const-volatile modifications + +#include <tr1/type_traits> +#include <testsuite_hooks.h> +#include <testsuite_tr1.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + using std::tr1::remove_const; + using std::tr1::is_same; + using namespace __gnu_test; + + VERIFY( (is_same<remove_const<const volatile int>::type, + volatile int>::value) ); + VERIFY( (is_same<remove_const<const int*>::type, const int*>::value) ); + VERIFY( (is_same<remove_const<const volatile ClassType>::type, + volatile ClassType>::value) ); + VERIFY( (is_same<remove_const<const ClassType*>::type, + const ClassType*>::value) ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_cv.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_cv.cc new file mode 100644 index 0000000..775f6ef --- /dev/null +++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_cv.cc @@ -0,0 +1,47 @@ +// 2004-12-10 Paolo Carlini <pcarlini@suse.de> +// +// Copyright (C) 2004 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 4.7.1 Const-volatile modifications + +#include <tr1/type_traits> +#include <testsuite_hooks.h> +#include <testsuite_tr1.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + using std::tr1::remove_cv; + using std::tr1::is_same; + using namespace __gnu_test; + + VERIFY( (is_same<remove_cv<const volatile int>::type, int>::value) ); + VERIFY( (is_same<remove_cv<const volatile int*>::type, + const volatile int*>::value) ); + VERIFY( (is_same<remove_cv<const volatile ClassType>::type, + ClassType>::value) ); + VERIFY( (is_same<remove_cv<const volatile ClassType*>::type, + const volatile ClassType*>::value) ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_volatile.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_volatile.cc new file mode 100644 index 0000000..7cf9bf6 --- /dev/null +++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/const_volatile_modifications/remove_volatile.cc @@ -0,0 +1,48 @@ +// 2004-12-10 Paolo Carlini <pcarlini@suse.de> +// +// Copyright (C) 2004 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// 4.7.1 Const-volatile modifications + +#include <tr1/type_traits> +#include <testsuite_hooks.h> +#include <testsuite_tr1.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + using std::tr1::remove_volatile; + using std::tr1::is_same; + using namespace __gnu_test; + + VERIFY( (is_same<remove_volatile<const volatile int>::type, + const int>::value) ); + VERIFY( (is_same<remove_volatile<volatile int*>::type, + volatile int*>::value) ); + VERIFY( (is_same<remove_volatile<const volatile ClassType>::type, + const ClassType>::value) ); + VERIFY( (is_same<remove_volatile<volatile ClassType*>::type, + volatile ClassType*>::value) ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/is_array.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/is_array.cc index 6977720..bb4e363 100644 --- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/is_array.cc +++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/primary_type_categories/is_array/is_array.cc @@ -30,19 +30,18 @@ void test01() using std::tr1::is_array; using namespace __gnu_test; - typedef int int_array[5]; - typedef int empty_int_array[]; - typedef float* pointer_array[5]; - typedef float* empty_pointer_array[]; - typedef ClassType ClassType_array[5]; - typedef ClassType empty_ClassType_array[]; - - VERIFY( (test_category<is_array, int_array, true>()) ); - VERIFY( (test_category<is_array, empty_int_array, true>()) ); - VERIFY( (test_category<is_array, pointer_array, true>()) ); - VERIFY( (test_category<is_array, empty_pointer_array, true>()) ); - VERIFY( (test_category<is_array, ClassType_array, true>()) ); - VERIFY( (test_category<is_array, empty_ClassType_array, true>()) ); + VERIFY( (test_category<is_array, int[2], true>()) ); + VERIFY( (test_category<is_array, int[], true>()) ); + VERIFY( (test_category<is_array, int[2][3], true>()) ); + VERIFY( (test_category<is_array, int[][3], true>()) ); + VERIFY( (test_category<is_array, float*[2], true>()) ); + VERIFY( (test_category<is_array, float*[], true>()) ); + VERIFY( (test_category<is_array, float*[2][3], true>()) ); + VERIFY( (test_category<is_array, float*[][3], true>()) ); + VERIFY( (test_category<is_array, ClassType[2], true>()) ); + VERIFY( (test_category<is_array, ClassType[], true>()) ); + VERIFY( (test_category<is_array, ClassType[2][3], true>()) ); + VERIFY( (test_category<is_array, ClassType[][3], true>()) ); // Sanity check. VERIFY( (test_category<is_array, ClassType, false>()) ); |