PR libstdc++/89416 fix __is_move_insertable trait
authorJonathan Wakely <jwakely@redhat.com>
Thu, 21 Feb 2019 20:47:43 +0000 (20:47 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 21 Feb 2019 20:47:43 +0000 (20:47 +0000)
commitd331c5f10d5e6c9f41a24ff7cb7a8c6493790885
treed6fc9993cacf0943455f6d6d497ad7b32d0fdd5f
parentf43044a3d7856c6d8b88c706d1e078268e12f7af
PR libstdc++/89416 fix __is_move_insertable trait

The common base class for __is_move_insertable and __is_copy_insertable
instantiates both the copy and move tests, when only one is needed. The
unneeded one might cause errors outside the immediate context.

The solution used in this patch is to replace them with alias templates,
which will only be instantiated as needed.

PR libstdc++/89416
* include/bits/alloc_traits.h (__is_alloc_insertable_impl): Replace
class template with class. Replace move and copy member types with
member alias templates, so they are only instantiated when needed.
(__is_copy_insertable, __is_move_insertable): Adjust base class.
* testsuite/23_containers/vector/modifiers/push_back/89130.cc: Enable
test for C++11/14/17 as well.
* testsuite/23_containers/vector/modifiers/push_back/89416.cc: New
test.

From-SVN: r269075
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/alloc_traits.h
libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/89130.cc
libstdc++-v3/testsuite/23_containers/vector/modifiers/push_back/89416.cc [new file with mode: 0644]