This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: libstdc++ not conforming with --enable-concepts-check?
Paolo Carlini wrote:
I'm fixing this too, more material for v7-branch ;) ...
The below is what I have just finished testing on x86 and x86_64: barring
objections, tomorrow I will apply it to the libstdcxx_so_7-branch.
During the work, a minor, but unexpected, surprise: due to 23.3.1.2, we
cannot explicitly instantiate std::map with T non default constructible,
doh!
Paolo.
/////////////
2004-09-24 Paolo Carlini <pcarlini@suse.de>
Jonathan Wakely <redi@gcc.gnu.org>
* include/bits/stl_list.h (list::list(size_type, value_type,
const allocator_type&): Implement according to the letter of the
standard, i.e., don't use two overloads, not equivalent in case
of non default constructible T.
(list::resize(size_type, const value_type&): Fix the signature:
according to the standard the second argument is by value; also,
don't use two overloads.
* include/bits/list.tcc (list::resize(size_type, const value_type&)):
Adjust consistently the signature.
* include/bits/stl_deque.h (deque::deque(size_type, value_type,
const allocator_type&): Likewise.
(deque::resize(size_type, const value_type&)): Likewise.
* include/bits/stl_vector.h (vector::vector(size_type, value_type,
const allocator_type&): Likewise.
(vector::resize(size_type, const value_type&)): Likewise.
* testsuite/testsuite_hooks.h: Add NonDefaultConstructible test type.
* testsuite/23_containers/deque/explicit_instantiation.cc: Move to...
* testsuite/23_containers/deque/explicit_instantiation/1.cc: ...here.
* testsuite/23_containers/deque/explicit_instantiation/2.cc: New.
* testsuite/23_containers/list/explicit_instantiation.cc: Move to...
* testsuite/23_containers/list/explicit_instantiation/1.cc: ...here.
* testsuite/23_containers/list/explicit_instantiation/2.cc: New.
* testsuite/23_containers/map/explicit_instantiation.cc: Move to...
* testsuite/23_containers/map/explicit_instantiation/1.cc: ...here.
* testsuite/23_containers/map/explicit_instantiation/2.cc: New.
* testsuite/23_containers/multimap/explicit_instantiation.cc: Move to...
* testsuite/23_containers/multimap/explicit_instantiation/1.cc: ...here.
* testsuite/23_containers/multimap/explicit_instantiation/2.cc: New.
* testsuite/23_containers/multiset/explicit_instantiation.cc: Move to...
* testsuite/23_containers/multiset/explicit_instantiation/1.cc: ...here.
* testsuite/23_containers/multiset/explicit_instantiation/2.cc: New.
* testsuite/23_containers/set/explicit_instantiation.cc: Move to...
* testsuite/23_containers/set/explicit_instantiation/1.cc: ...here.
* testsuite/23_containers/set/explicit_instantiation/2.cc: New.
* testsuite/23_containers/vector/explicit_instantiation.cc: Move to...
* testsuite/23_containers/vector/explicit_instantiation/1.cc: ...here.
* testsuite/23_containers/vector/explicit_instantiation/2.cc: New.
diff -urN libstdc++-v3-orig/include/bits/list.tcc libstdc++-v3/include/bits/list.tcc
--- libstdc++-v3-orig/include/bits/list.tcc 2004-08-03 12:11:31.000000000 +0200
+++ libstdc++-v3/include/bits/list.tcc 2004-09-23 16:52:34.000000000 +0200
@@ -102,7 +102,7 @@
template<typename _Tp, typename _Alloc>
void
list<_Tp, _Alloc>::
- resize(size_type __new_size, const value_type& __x)
+ resize(size_type __new_size, value_type __x)
{
iterator __i = begin();
size_type __len = 0;
diff -urN libstdc++-v3-orig/include/bits/stl_deque.h libstdc++-v3/include/bits/stl_deque.h
--- libstdc++-v3-orig/include/bits/stl_deque.h 2004-07-28 18:37:17.000000000 +0200
+++ libstdc++-v3/include/bits/stl_deque.h 2004-09-23 16:48:50.000000000 +0200
@@ -651,24 +651,13 @@
*
* This constructor fills the %deque with @a n copies of @a value.
*/
- deque(size_type __n, const value_type& __value,
+ explicit
+ deque(size_type __n, const value_type& __value = value_type(),
const allocator_type& __a = allocator_type())
: _Base(__a, __n)
{ _M_fill_initialize(__value); }
/**
- * @brief Create a %deque with default elements.
- * @param n The number of elements to initially create.
- *
- * This constructor fills the %deque with @a n copies of a
- * default-constructed element.
- */
- explicit
- deque(size_type __n)
- : _Base(allocator_type(), __n)
- { _M_fill_initialize(value_type()); }
-
- /**
* @brief %Deque copy constructor.
* @param x A %deque of identical element and allocator types.
*
@@ -851,7 +840,7 @@
* are populated with given data.
*/
void
- resize(size_type __new_size, const value_type& __x)
+ resize(size_type __new_size, value_type __x = value_type())
{
const size_type __len = size();
if (__new_size < __len)
@@ -861,19 +850,6 @@
}
/**
- * @brief Resizes the %deque to the specified number of elements.
- * @param new_size Number of elements the %deque should contain.
- *
- * This function will resize the %deque to the specified number of
- * elements. If the number is smaller than the %deque's current size the
- * %deque is truncated, otherwise the %deque is extended and new elements
- * are default-constructed.
- */
- void
- resize(size_type new_size)
- { resize(new_size, value_type()); }
-
- /**
* Returns true if the %deque is empty. (Thus begin() would equal end().)
*/
bool
diff -urN libstdc++-v3-orig/include/bits/stl_list.h libstdc++-v3/include/bits/stl_list.h
--- libstdc++-v3-orig/include/bits/stl_list.h 2004-08-02 06:40:13.000000000 +0200
+++ libstdc++-v3/include/bits/stl_list.h 2004-09-23 16:52:18.000000000 +0200
@@ -462,24 +462,13 @@
*
* This constructor fills the %list with @a n copies of @a value.
*/
- list(size_type __n, const value_type& __value,
+ explicit
+ list(size_type __n, const value_type& __value = value_type(),
const allocator_type& __a = allocator_type())
: _Base(__a)
{ this->insert(begin(), __n, __value); }
/**
- * @brief Create a %list with default elements.
- * @param n The number of elements to initially create.
- *
- * This constructor fills the %list with @a n copies of a
- * default-constructed element.
- */
- explicit
- list(size_type __n)
- : _Base(allocator_type())
- { this->insert(begin(), __n, value_type()); }
-
- /**
* @brief %List copy constructor.
* @param x A %list of identical element and allocator types.
*
@@ -669,20 +658,7 @@
* extended and new elements are populated with given data.
*/
void
- resize(size_type __new_size, const value_type& __x);
-
- /**
- * @brief Resizes the %list to the specified number of elements.
- * @param new_size Number of elements the %list should contain.
- *
- * This function will resize the %list to the specified number of
- * elements. If the number is smaller than the %list's current
- * size the %list is truncated, otherwise the %list is extended
- * and new elements are default-constructed.
- */
- void
- resize(size_type __new_size)
- { this->resize(__new_size, value_type()); }
+ resize(size_type __new_size, value_type __x = value_type());
// element access
/**
diff -urN libstdc++-v3-orig/include/bits/stl_vector.h libstdc++-v3/include/bits/stl_vector.h
--- libstdc++-v3-orig/include/bits/stl_vector.h 2004-07-28 18:37:17.000000000 +0200
+++ libstdc++-v3/include/bits/stl_vector.h 2004-09-23 16:50:08.000000000 +0200
@@ -196,7 +196,8 @@
*
* This constructor fills the %vector with @a n copies of @a value.
*/
- vector(size_type __n, const value_type& __value,
+ explicit
+ vector(size_type __n, const value_type& __value = value_type(),
const allocator_type& __a = allocator_type())
: _Base(__n, __a)
{
@@ -206,22 +207,6 @@
}
/**
- * @brief Create a %vector with default elements.
- * @param n The number of elements to initially create.
- *
- * This constructor fills the %vector with @a n copies of a
- * default-constructed element.
- */
- explicit
- vector(size_type __n)
- : _Base(__n, allocator_type())
- {
- std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, value_type(),
- this->get_allocator());
- this->_M_impl._M_finish = this->_M_impl._M_start + __n;
- }
-
- /**
* @brief %Vector copy constructor.
* @param x A %vector of identical element and allocator types.
*
@@ -419,7 +404,7 @@
* given data.
*/
void
- resize(size_type __new_size, const value_type& __x)
+ resize(size_type __new_size, value_type __x = value_type())
{
if (__new_size < size())
erase(begin() + __new_size, end());
@@ -428,20 +413,6 @@
}
/**
- * @brief Resizes the %vector to the specified number of elements.
- * @param new_size Number of elements the %vector should contain.
- *
- * This function will resize the %vector to the specified
- * number of elements. If the number is smaller than the
- * %vector's current size the %vector is truncated, otherwise
- * the %vector is extended and new elements are
- * default-constructed.
- */
- void
- resize(size_type __new_size)
- { resize(__new_size, value_type()); }
-
- /**
* Returns the total number of elements that the %vector can
* hold before needing to allocate more memory.
*/
diff -urN libstdc++-v3-orig/testsuite/23_containers/deque/explicit_instantiation/1.cc libstdc++-v3/testsuite/23_containers/deque/explicit_instantiation/1.cc
--- libstdc++-v3-orig/testsuite/23_containers/deque/explicit_instantiation/1.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/deque/explicit_instantiation/1.cc 2004-08-02 06:40:16.000000000 +0200
@@ -0,0 +1,34 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <deque>
+
+// { dg-do compile }
+
+template class std::deque<int>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/deque/explicit_instantiation/2.cc libstdc++-v3/testsuite/23_containers/deque/explicit_instantiation/2.cc
--- libstdc++-v3-orig/testsuite/23_containers/deque/explicit_instantiation/2.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/deque/explicit_instantiation/2.cc 2004-09-23 17:18:45.000000000 +0200
@@ -0,0 +1,35 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <deque>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+template class std::deque<__gnu_test::NonDefaultConstructible>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/deque/explicit_instantiation.cc libstdc++-v3/testsuite/23_containers/deque/explicit_instantiation.cc
--- libstdc++-v3-orig/testsuite/23_containers/deque/explicit_instantiation.cc 2004-08-02 06:40:16.000000000 +0200
+++ libstdc++-v3/testsuite/23_containers/deque/explicit_instantiation.cc 1970-01-01 01:00:00.000000000 +0100
@@ -1,34 +0,0 @@
-// 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.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// This file tests explicit instantiation of library containers
-
-#include <deque>
-
-// { dg-do compile }
-
-template class std::deque<int>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/list/explicit_instantiation/1.cc libstdc++-v3/testsuite/23_containers/list/explicit_instantiation/1.cc
--- libstdc++-v3-orig/testsuite/23_containers/list/explicit_instantiation/1.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/list/explicit_instantiation/1.cc 2004-08-02 06:40:16.000000000 +0200
@@ -0,0 +1,34 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <list>
+
+// { dg-do compile }
+
+template class std::list<int>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/list/explicit_instantiation/2.cc libstdc++-v3/testsuite/23_containers/list/explicit_instantiation/2.cc
--- libstdc++-v3-orig/testsuite/23_containers/list/explicit_instantiation/2.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/list/explicit_instantiation/2.cc 2004-09-23 17:19:04.000000000 +0200
@@ -0,0 +1,35 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <list>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+template class std::list<__gnu_test::NonDefaultConstructible>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/list/explicit_instantiation.cc libstdc++-v3/testsuite/23_containers/list/explicit_instantiation.cc
--- libstdc++-v3-orig/testsuite/23_containers/list/explicit_instantiation.cc 2004-08-02 06:40:16.000000000 +0200
+++ libstdc++-v3/testsuite/23_containers/list/explicit_instantiation.cc 1970-01-01 01:00:00.000000000 +0100
@@ -1,34 +0,0 @@
-// 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.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// This file tests explicit instantiation of library containers
-
-#include <list>
-
-// { dg-do compile }
-
-template class std::list<int>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/map/explicit_instantiation/1.cc libstdc++-v3/testsuite/23_containers/map/explicit_instantiation/1.cc
--- libstdc++-v3-orig/testsuite/23_containers/map/explicit_instantiation/1.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/map/explicit_instantiation/1.cc 2004-08-02 06:40:17.000000000 +0200
@@ -0,0 +1,34 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+
+// { dg-do compile }
+
+template class std::map<int, double>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/map/explicit_instantiation/2.cc libstdc++-v3/testsuite/23_containers/map/explicit_instantiation/2.cc
--- libstdc++-v3-orig/testsuite/23_containers/map/explicit_instantiation/2.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/map/explicit_instantiation/2.cc 2004-09-23 18:01:57.000000000 +0200
@@ -0,0 +1,37 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// N.B. We cannot instantiate with T == NonDefaultConstructible
+// because of 23.3.1.2.
+template class std::map<__gnu_test::NonDefaultConstructible, double>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/map/explicit_instantiation.cc libstdc++-v3/testsuite/23_containers/map/explicit_instantiation.cc
--- libstdc++-v3-orig/testsuite/23_containers/map/explicit_instantiation.cc 2004-08-02 06:40:17.000000000 +0200
+++ libstdc++-v3/testsuite/23_containers/map/explicit_instantiation.cc 1970-01-01 01:00:00.000000000 +0100
@@ -1,34 +0,0 @@
-// 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.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// This file tests explicit instantiation of library containers
-
-#include <map>
-
-// { dg-do compile }
-
-template class std::map<int, double>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/multimap/explicit_instantiation/1.cc libstdc++-v3/testsuite/23_containers/multimap/explicit_instantiation/1.cc
--- libstdc++-v3-orig/testsuite/23_containers/multimap/explicit_instantiation/1.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/multimap/explicit_instantiation/1.cc 2004-08-02 06:40:17.000000000 +0200
@@ -0,0 +1,34 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+
+// { dg-do compile }
+
+template class std::multimap<int, double>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/multimap/explicit_instantiation/2.cc libstdc++-v3/testsuite/23_containers/multimap/explicit_instantiation/2.cc
--- libstdc++-v3-orig/testsuite/23_containers/multimap/explicit_instantiation/2.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/multimap/explicit_instantiation/2.cc 2004-09-23 17:45:24.000000000 +0200
@@ -0,0 +1,36 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+template class std::multimap<__gnu_test::NonDefaultConstructible,
+ __gnu_test::NonDefaultConstructible>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/multimap/explicit_instantiation.cc libstdc++-v3/testsuite/23_containers/multimap/explicit_instantiation.cc
--- libstdc++-v3-orig/testsuite/23_containers/multimap/explicit_instantiation.cc 2004-08-02 06:40:17.000000000 +0200
+++ libstdc++-v3/testsuite/23_containers/multimap/explicit_instantiation.cc 1970-01-01 01:00:00.000000000 +0100
@@ -1,34 +0,0 @@
-// 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.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// This file tests explicit instantiation of library containers
-
-#include <map>
-
-// { dg-do compile }
-
-template class std::multimap<int, double>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/multiset/explicit_instantiation/1.cc libstdc++-v3/testsuite/23_containers/multiset/explicit_instantiation/1.cc
--- libstdc++-v3-orig/testsuite/23_containers/multiset/explicit_instantiation/1.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/multiset/explicit_instantiation/1.cc 2004-08-02 06:40:18.000000000 +0200
@@ -0,0 +1,34 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+
+// { dg-do compile }
+
+template class std::multiset<int>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/multiset/explicit_instantiation/2.cc libstdc++-v3/testsuite/23_containers/multiset/explicit_instantiation/2.cc
--- libstdc++-v3-orig/testsuite/23_containers/multiset/explicit_instantiation/2.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/multiset/explicit_instantiation/2.cc 2004-09-23 17:20:49.000000000 +0200
@@ -0,0 +1,35 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+template class std::multiset<__gnu_test::NonDefaultConstructible>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/multiset/explicit_instantiation.cc libstdc++-v3/testsuite/23_containers/multiset/explicit_instantiation.cc
--- libstdc++-v3-orig/testsuite/23_containers/multiset/explicit_instantiation.cc 2004-08-02 06:40:18.000000000 +0200
+++ libstdc++-v3/testsuite/23_containers/multiset/explicit_instantiation.cc 1970-01-01 01:00:00.000000000 +0100
@@ -1,34 +0,0 @@
-// 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.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// This file tests explicit instantiation of library containers
-
-#include <set>
-
-// { dg-do compile }
-
-template class std::multiset<int>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/set/explicit_instantiation/1.cc libstdc++-v3/testsuite/23_containers/set/explicit_instantiation/1.cc
--- libstdc++-v3-orig/testsuite/23_containers/set/explicit_instantiation/1.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/set/explicit_instantiation/1.cc 2004-08-02 06:40:18.000000000 +0200
@@ -0,0 +1,34 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+
+// { dg-do compile }
+
+template class std::set<int>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/set/explicit_instantiation/2.cc libstdc++-v3/testsuite/23_containers/set/explicit_instantiation/2.cc
--- libstdc++-v3-orig/testsuite/23_containers/set/explicit_instantiation/2.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/set/explicit_instantiation/2.cc 2004-09-23 17:22:07.000000000 +0200
@@ -0,0 +1,35 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+template class std::set<__gnu_test::NonDefaultConstructible>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/set/explicit_instantiation.cc libstdc++-v3/testsuite/23_containers/set/explicit_instantiation.cc
--- libstdc++-v3-orig/testsuite/23_containers/set/explicit_instantiation.cc 2004-08-02 06:40:18.000000000 +0200
+++ libstdc++-v3/testsuite/23_containers/set/explicit_instantiation.cc 1970-01-01 01:00:00.000000000 +0100
@@ -1,34 +0,0 @@
-// 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.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// This file tests explicit instantiation of library containers
-
-#include <set>
-
-// { dg-do compile }
-
-template class std::set<int>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/vector/explicit_instantiation/1.cc libstdc++-v3/testsuite/23_containers/vector/explicit_instantiation/1.cc
--- libstdc++-v3-orig/testsuite/23_containers/vector/explicit_instantiation/1.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/vector/explicit_instantiation/1.cc 2004-08-02 06:40:19.000000000 +0200
@@ -0,0 +1,34 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <vector>
+
+// { dg-do compile }
+
+template class std::vector<int>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/vector/explicit_instantiation/2.cc libstdc++-v3/testsuite/23_containers/vector/explicit_instantiation/2.cc
--- libstdc++-v3-orig/testsuite/23_containers/vector/explicit_instantiation/2.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/23_containers/vector/explicit_instantiation/2.cc 2004-09-23 17:23:12.000000000 +0200
@@ -0,0 +1,35 @@
+// 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.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// This file tests explicit instantiation of library containers
+
+#include <vector>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+template class std::vector<__gnu_test::NonDefaultConstructible>;
diff -urN libstdc++-v3-orig/testsuite/23_containers/vector/explicit_instantiation.cc libstdc++-v3/testsuite/23_containers/vector/explicit_instantiation.cc
--- libstdc++-v3-orig/testsuite/23_containers/vector/explicit_instantiation.cc 2004-08-02 06:40:19.000000000 +0200
+++ libstdc++-v3/testsuite/23_containers/vector/explicit_instantiation.cc 1970-01-01 01:00:00.000000000 +0100
@@ -1,34 +0,0 @@
-// 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.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// This file tests explicit instantiation of library containers
-
-#include <vector>
-
-// { dg-do compile }
-
-template class std::vector<int>;
diff -urN libstdc++-v3-orig/testsuite/testsuite_hooks.h libstdc++-v3/testsuite/testsuite_hooks.h
--- libstdc++-v3-orig/testsuite/testsuite_hooks.h 2004-05-22 23:51:05.000000000 +0200
+++ libstdc++-v3/testsuite/testsuite_hooks.h 2004-09-23 17:52:01.000000000 +0200
@@ -137,7 +137,6 @@
}
};
-
// Run select unit tests after setting global locale.
void
run_tests_wrapped_locale(const char*, const func_callback&);
@@ -178,7 +177,22 @@
typedef unsigned int int_type;
typedef __gnu_cxx::character<value_type, int_type> pod_type;
+ // For containers (23.1/3).
+ struct NonDefaultConstructible
+ {
+ NonDefaultConstructible(int) { }
+ };
+ inline bool
+ operator==(const NonDefaultConstructible& lhs,
+ const NonDefaultConstructible& rhs)
+ { return false; }
+
+ inline bool
+ operator<(const NonDefaultConstructible& lhs,
+ const NonDefaultConstructible& rhs)
+ { return false; }
+
// Counting.
struct counter
{