libstdc++: Add workaround for weird std::tuple error [PR 96592]
This "fix" makes no sense, but it avoids an error from G++ about std::is_constructible being incomplete. The real problem is elsewhere, but this "fixes" the regression for now. libstdc++-v3/ChangeLog: PR libstdc++/96592 * include/std/tuple (_TupleConstraints<true, T...>): Use alternative is_constructible instead of std::is_constructible. * testsuite/20_util/tuple/cons/96592.cc: New test.
This commit is contained in:
parent
3c21913415
commit
032a4b42cc
@ -539,6 +539,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
template<bool, typename... _Types>
|
||||
struct _TupleConstraints
|
||||
{
|
||||
template<typename _Tp, typename _Up> // Workaround for PR 96592
|
||||
using is_constructible
|
||||
= __bool_constant<__is_constructible(_Tp, _Up)>;
|
||||
|
||||
// Constraint for a non-explicit constructor.
|
||||
// True iff each Ti in _Types... can be constructed from Ui in _UTypes...
|
||||
// and every Ui is implicitly convertible to Ti.
|
||||
|
58
libstdc++-v3/testsuite/20_util/tuple/cons/96592.cc
Normal file
58
libstdc++-v3/testsuite/20_util/tuple/cons/96592.cc
Normal file
@ -0,0 +1,58 @@
|
||||
// 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 } }
|
||||
|
||||
#include <tuple>
|
||||
|
||||
// PR 96592 comment 0
|
||||
|
||||
template <typename SessionT>
|
||||
struct SomeQuery {
|
||||
SessionT& session_;
|
||||
SomeQuery(SessionT& session) : session_(session) {}
|
||||
};
|
||||
|
||||
template <typename SessionT>
|
||||
struct Handler {
|
||||
std::tuple<SomeQuery<SessionT>> queries_;
|
||||
Handler(SessionT& session) : queries_(session) {}
|
||||
};
|
||||
|
||||
struct Session {
|
||||
Handler<Session> handler_;
|
||||
Session() : handler_{*this} {}
|
||||
};
|
||||
|
||||
Session session;
|
||||
|
||||
// PR 96592 comment 1
|
||||
template <typename T>
|
||||
class DependsOnT
|
||||
{
|
||||
public:
|
||||
DependsOnT(T&) {}
|
||||
};
|
||||
|
||||
class Test
|
||||
{
|
||||
public:
|
||||
Test() : test_{*this} {}
|
||||
|
||||
private:
|
||||
std::tuple<DependsOnT<Test>> test_;
|
||||
};
|
Loading…
Reference in New Issue
Block a user