mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-02 00:43:44 +08:00
libstdc++: Implement LWG 561 for std::inserter
libstdc++-v3/ChangeLog: * include/bits/stl_iterator.h (inserter): Do not deduce iterator type (LWG 561). * testsuite/24_iterators/insert_iterator/dr561.cc: New test.
This commit is contained in:
parent
8bd92d8097
commit
2203a80a72
@ -931,13 +931,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
inserter(_Container& __x, std::__detail::__range_iter_t<_Container> __i)
|
||||
{ return insert_iterator<_Container>(__x, __i); }
|
||||
#else
|
||||
template<typename _Container, typename _Iterator>
|
||||
template<typename _Container>
|
||||
inline insert_iterator<_Container>
|
||||
inserter(_Container& __x, _Iterator __i)
|
||||
{
|
||||
return insert_iterator<_Container>(__x,
|
||||
typename _Container::iterator(__i));
|
||||
}
|
||||
inserter(_Container& __x, typename _Container::iterator __i)
|
||||
{ return insert_iterator<_Container>(__x, __i); }
|
||||
#endif
|
||||
|
||||
// @} group iterators
|
||||
|
47
libstdc++-v3/testsuite/24_iterators/insert_iterator/dr561.cc
Normal file
47
libstdc++-v3/testsuite/24_iterators/insert_iterator/dr561.cc
Normal file
@ -0,0 +1,47 @@
|
||||
// Copyright (C) 2020 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 3, 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 COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
// Example from https://wg21.link/lwg561
|
||||
|
||||
#include <iterator>
|
||||
#include <string>
|
||||
|
||||
namespace my
|
||||
{
|
||||
|
||||
template <class String>
|
||||
struct my_type {};
|
||||
|
||||
struct my_container
|
||||
{
|
||||
template <class String>
|
||||
void push_back(const my_type<String>&);
|
||||
};
|
||||
|
||||
template <class String>
|
||||
void inserter(const my_type<String>& m, my_container& c) {c.push_back(m);}
|
||||
|
||||
} // my
|
||||
|
||||
int main()
|
||||
{
|
||||
my::my_container c;
|
||||
my::my_type<std::string> m;
|
||||
inserter(m, c);
|
||||
}
|
Loading…
Reference in New Issue
Block a user