re PR c++/67844 (Cannot make tuple of class with template constructor)
2015-10-05 Ville Voutilainen <ville.voutilainen@gmail.com> PR 67844. * include/std/tuple (_TC::_NonNestedTuple): Eagerly reject conversions from tuple types same as the target tuple. * testsuite/20_util/tuple/67844.cc: New. * testsuite/20_util/tuple/cons/nested_tuple_construct.cc: Add a missing copyright header. From-SVN: r228468
This commit is contained in:
parent
aa385812b3
commit
057ce49719
@ -1,3 +1,12 @@
|
||||
2015-10-05 Ville Voutilainen <ville.voutilainen@gmail.com>
|
||||
|
||||
PR 67844.
|
||||
* include/std/tuple (_TC::_NonNestedTuple): Eagerly reject
|
||||
conversions from tuple types same as the target tuple.
|
||||
* testsuite/20_util/tuple/67844.cc: New.
|
||||
* testsuite/20_util/tuple/cons/nested_tuple_construct.cc: Add
|
||||
a missing copyright header.
|
||||
|
||||
2015-10-03 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* python/libstdcxx/v6/printers.py (StdExpAnyPrinter): Remove support
|
||||
|
@ -457,6 +457,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
}
|
||||
};
|
||||
|
||||
template<typename... _Elements>
|
||||
class tuple;
|
||||
|
||||
// Concept utility functions, reused in conditionally-explicit
|
||||
// constructors.
|
||||
@ -490,7 +492,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
template<typename _SrcTuple>
|
||||
static constexpr bool _NonNestedTuple()
|
||||
{
|
||||
return __and_<__not_<is_convertible<_SrcTuple, _Elements...>>,
|
||||
return __and_<__not_<is_same<tuple<_Elements...>,
|
||||
typename remove_cv<
|
||||
typename remove_reference<_SrcTuple>::type
|
||||
>::type>>,
|
||||
__not_<is_convertible<_SrcTuple, _Elements...>>,
|
||||
__not_<is_constructible<_Elements..., _SrcTuple>>
|
||||
>::value;
|
||||
}
|
||||
|
43
libstdc++-v3/testsuite/20_util/tuple/67844.cc
Normal file
43
libstdc++-v3/testsuite/20_util/tuple/67844.cc
Normal file
@ -0,0 +1,43 @@
|
||||
// { dg-do compile }
|
||||
|
||||
// Copyright (C) 2015 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/>.
|
||||
|
||||
// libstdc++/67844
|
||||
|
||||
#include <tuple>
|
||||
|
||||
struct A
|
||||
{
|
||||
template <typename T>
|
||||
A(T)
|
||||
{
|
||||
}
|
||||
|
||||
A(const A&) = default;
|
||||
A(A&&) = default;
|
||||
A& operator=(const A&) = default;
|
||||
A& operator=(A&&) = default;
|
||||
~A() = default;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
auto x = A{7};
|
||||
std::make_tuple(x);
|
||||
}
|
||||
|
@ -1,3 +1,20 @@
|
||||
// Copyright (C) 2015 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/>.
|
||||
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <testsuite_hooks.h>
|
||||
|
Loading…
Reference in New Issue
Block a user