Commit cf9280bf by Paolo Carlini Committed by Paolo Carlini

array (array): Add pointer and const_pointer typedefs in C++0x mode, per DR 1306.

2010-02-19  Paolo Carlini  <paolo.carlini@oracle.com>

	* include/tr1_impl/array (array): Add pointer and const_pointer
	typedefs in C++0x mode, per DR 1306.
	* testsuite/util/testsuite_containers.h (basic_types): Add pointer
	and const_pointer typedefs.
	(pointer_aware_types): Remove.
	* testsuite/util/testsuite_container_traits.h: Adjust.

From-SVN: r156906
parent 25c0cad4
2010-02-19 Paolo Carlini <paolo.carlini@oracle.com> 2010-02-19 Paolo Carlini <paolo.carlini@oracle.com>
* include/tr1_impl/array (array): Add pointer and const_pointer
typedefs in C++0x mode, per DR 1306.
* testsuite/util/testsuite_containers.h (basic_types): Add pointer
and const_pointer typedefs.
(pointer_aware_types): Remove.
* testsuite/util/testsuite_container_traits.h: Adjust.
2010-02-19 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/stl_algo.h (for_each): Implement resolution of DR 1110. * include/bits/stl_algo.h (for_each): Implement resolution of DR 1110.
* testsuite/25_algorithms/for_each/1.cc: New. * testsuite/25_algorithms/for_each/1.cc: New.
......
// class template array -*- C++ -*- // class template array -*- C++ -*-
// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. // Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -49,6 +49,10 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 ...@@ -49,6 +49,10 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
struct array struct array
{ {
typedef _Tp value_type; typedef _Tp value_type;
#ifdef _GLIBCXX_INCLUDE_AS_CXX0X
typedef _Tp* pointer;
typedef const _Tp* const_pointer;
#endif
typedef value_type& reference; typedef value_type& reference;
typedef const value_type& const_reference; typedef const value_type& const_reference;
typedef value_type* iterator; typedef value_type* iterator;
......
...@@ -34,7 +34,6 @@ namespace __gnu_test ...@@ -34,7 +34,6 @@ namespace __gnu_test
typedef std::false_type is_adaptor; typedef std::false_type is_adaptor;
typedef std::false_type is_reversible; typedef std::false_type is_reversible;
typedef std::false_type is_allocator_aware; typedef std::false_type is_allocator_aware;
typedef std::false_type is_pointer_aware;
typedef std::false_type is_associative; typedef std::false_type is_associative;
typedef std::false_type is_unordered; typedef std::false_type is_unordered;
typedef std::false_type is_mapped; typedef std::false_type is_mapped;
...@@ -64,7 +63,6 @@ namespace __gnu_test ...@@ -64,7 +63,6 @@ namespace __gnu_test
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_reversible; typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type has_erase; typedef std::true_type has_erase;
typedef std::true_type has_insert; typedef std::true_type has_insert;
...@@ -77,7 +75,6 @@ namespace __gnu_test ...@@ -77,7 +75,6 @@ namespace __gnu_test
{ {
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type has_erase; typedef std::true_type has_erase;
typedef std::true_type has_insert; typedef std::true_type has_insert;
...@@ -91,7 +88,6 @@ namespace __gnu_test ...@@ -91,7 +88,6 @@ namespace __gnu_test
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_reversible; typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type has_erase; typedef std::true_type has_erase;
typedef std::true_type has_insert; typedef std::true_type has_insert;
...@@ -105,7 +101,6 @@ namespace __gnu_test ...@@ -105,7 +101,6 @@ namespace __gnu_test
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_reversible; typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type has_erase; typedef std::true_type has_erase;
typedef std::true_type has_insert; typedef std::true_type has_insert;
...@@ -118,7 +113,6 @@ namespace __gnu_test ...@@ -118,7 +113,6 @@ namespace __gnu_test
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_reversible; typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type has_erase; typedef std::true_type has_erase;
typedef std::true_type has_insert; typedef std::true_type has_insert;
...@@ -132,7 +126,6 @@ namespace __gnu_test ...@@ -132,7 +126,6 @@ namespace __gnu_test
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_reversible; typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type has_erase; typedef std::true_type has_erase;
typedef std::true_type has_insert; typedef std::true_type has_insert;
...@@ -144,7 +137,6 @@ namespace __gnu_test ...@@ -144,7 +137,6 @@ namespace __gnu_test
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_reversible; typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_associative; typedef std::true_type is_associative;
typedef std::true_type is_mapped; typedef std::true_type is_mapped;
...@@ -157,7 +149,6 @@ namespace __gnu_test ...@@ -157,7 +149,6 @@ namespace __gnu_test
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_reversible; typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_associative; typedef std::true_type is_associative;
typedef std::true_type is_mapped; typedef std::true_type is_mapped;
...@@ -170,7 +161,6 @@ namespace __gnu_test ...@@ -170,7 +161,6 @@ namespace __gnu_test
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_reversible; typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_associative; typedef std::true_type is_associative;
typedef std::true_type has_insert; typedef std::true_type has_insert;
...@@ -182,7 +172,6 @@ namespace __gnu_test ...@@ -182,7 +172,6 @@ namespace __gnu_test
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_reversible; typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_associative; typedef std::true_type is_associative;
typedef std::true_type has_insert; typedef std::true_type has_insert;
...@@ -213,7 +202,6 @@ namespace __gnu_test ...@@ -213,7 +202,6 @@ namespace __gnu_test
{ {
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_unordered; typedef std::true_type is_unordered;
typedef std::true_type is_mapped; typedef std::true_type is_mapped;
...@@ -228,7 +216,6 @@ namespace __gnu_test ...@@ -228,7 +216,6 @@ namespace __gnu_test
{ {
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_unordered; typedef std::true_type is_unordered;
typedef std::true_type is_mapped; typedef std::true_type is_mapped;
...@@ -241,7 +228,6 @@ namespace __gnu_test ...@@ -241,7 +228,6 @@ namespace __gnu_test
{ {
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_unordered; typedef std::true_type is_unordered;
typedef std::true_type has_size_type_constructor; typedef std::true_type has_size_type_constructor;
...@@ -254,7 +240,6 @@ namespace __gnu_test ...@@ -254,7 +240,6 @@ namespace __gnu_test
{ {
typedef std::true_type is_container; typedef std::true_type is_container;
typedef std::true_type is_allocator_aware; typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_unordered; typedef std::true_type is_unordered;
typedef std::true_type has_size_type_constructor; typedef std::true_type has_size_type_constructor;
......
// -*- C++ -*- // -*- C++ -*-
// Copyright (C) 2009 Free Software Foundation, Inc. // Copyright (C) 2009, 2010 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the terms
...@@ -33,6 +33,8 @@ namespace __gnu_test ...@@ -33,6 +33,8 @@ namespace __gnu_test
// Base container requirements (table 80) // Base container requirements (table 80)
typedef _Tp test_type; typedef _Tp test_type;
typedef typename test_type::value_type value_type; typedef typename test_type::value_type value_type;
typedef typename test_type::pointer pointer;
typedef typename test_type::const_pointer const_pointer;
typedef typename test_type::reference reference; typedef typename test_type::reference reference;
typedef typename test_type::const_reference const_reference; typedef typename test_type::const_reference const_reference;
typedef typename test_type::iterator iterator; typedef typename test_type::iterator iterator;
...@@ -59,15 +61,6 @@ namespace __gnu_test ...@@ -59,15 +61,6 @@ namespace __gnu_test
typedef typename test_type::allocator_type allocator_type; typedef typename test_type::allocator_type allocator_type;
}; };
template<typename _Tp, bool _Bt = traits<_Tp>::is_pointer_aware::value>
struct pointer_aware_types
{
// Allocator-aware requirements (table 82)
typedef _Tp test_type;
typedef typename test_type::pointer pointer;
typedef typename test_type::const_pointer const_pointer;
};
template<typename _Tp, bool _Bt = traits<_Tp>::is_associative::value> template<typename _Tp, bool _Bt = traits<_Tp>::is_associative::value>
struct associative_types struct associative_types
{ {
...@@ -114,13 +107,13 @@ namespace __gnu_test ...@@ -114,13 +107,13 @@ namespace __gnu_test
struct basic_types<_Tp, false> { }; struct basic_types<_Tp, false> { };
template<typename _Tp> template<typename _Tp>
struct reversible_types<_Tp, false> { }; struct adaptor_types<_Tp, false> { };
template<typename _Tp> template<typename _Tp>
struct allocator_aware_types<_Tp, false> { }; struct reversible_types<_Tp, false> { };
template<typename _Tp> template<typename _Tp>
struct pointer_aware_types<_Tp, false> { }; struct allocator_aware_types<_Tp, false> { };
template<typename _Tp> template<typename _Tp>
struct associative_types<_Tp, false> { }; struct associative_types<_Tp, false> { };
...@@ -131,15 +124,12 @@ namespace __gnu_test ...@@ -131,15 +124,12 @@ namespace __gnu_test
template<typename _Tp> template<typename _Tp>
struct mapped_types<_Tp, false> { }; struct mapped_types<_Tp, false> { };
template<typename _Tp>
struct adaptor_types<_Tp, false> { };
// Primary template. // Primary template.
template<typename _Tp> template<typename _Tp>
struct types struct types
: basic_types<_Tp>, adaptor_types<_Tp>, reversible_types<_Tp>, : basic_types<_Tp>, adaptor_types<_Tp>, reversible_types<_Tp>,
allocator_aware_types<_Tp>, pointer_aware_types<_Tp>, allocator_aware_types<_Tp>, associative_types<_Tp>,
associative_types<_Tp>, unordered_types<_Tp>, mapped_types<_Tp> unordered_types<_Tp>, mapped_types<_Tp>
{ }; { };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment