* [v3 PATCH] Fix testsuite failures caused by the patch implementing LWG 2534.
@ 2016-11-30 15:58 Ville Voutilainen
2016-11-30 16:25 ` Jonathan Wakely
0 siblings, 1 reply; 7+ messages in thread
From: Ville Voutilainen @ 2016-11-30 15:58 UTC (permalink / raw)
To: libstdc++, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 608 bytes --]
2016-11-30 Ville Voutilainen <ville.voutilainen@gmail.com>
Fix testsuite failures caused by the patch implementing LWG 2534.
* include/std/istream (__is_convertible_to_basic_istream):
Change the return types of __check, introduce stream_type.
(operator>>(_Istream&&, _Tp&&)):
Use __is_convertible_to_basic_istream::stream_type as the return type.
* include/std/ostream (__is_convertible_to_basic_ostream):
Change the return types of __check, introduce stream_type.
(operator>>(_Ostream&&, _Tp&&)):
Use __is_convertible_to_basic_ostream::stream_type as the return type.
[-- Attachment #2: lwg2534_fix.diff --]
[-- Type: text/plain, Size: 2499 bytes --]
diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream
index 4f0e940..81df402 100644
--- a/libstdc++-v3/include/std/istream
+++ b/libstdc++-v3/include/std/istream
@@ -913,11 +913,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __is_convertible_to_basic_istream
{
template<typename _Ch, typename _Up>
- static true_type __check(basic_istream<_Ch, _Up>*);
+ static basic_istream<_Ch, _Up>& __check(basic_istream<_Ch, _Up>*);
- static false_type __check(void*);
+ static void __check(void*);
public:
- using type = decltype(__check(declval<_Tp*>()));
+ using stream_type = decltype(__check(declval<_Tp*>()));
+ using type = __not_<is_same<stream_type, void>>;
constexpr static bool value = type::value;
};
@@ -949,7 +950,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__is_convertible_to_basic_istream<
typename remove_reference<_Istream>::type>,
__is_extractable<_Istream&, _Tp&&>>::value,
- _Istream&>::type
+ typename __is_convertible_to_basic_istream<
+ typename
+ remove_reference<_Istream>::type>::stream_type>::type
operator>>(_Istream&& __is, _Tp&& __x)
{
__is >> std::forward<_Tp>(__x);
diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream
index a1fe892..64db7c7 100644
--- a/libstdc++-v3/include/std/ostream
+++ b/libstdc++-v3/include/std/ostream
@@ -617,11 +617,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __is_convertible_to_basic_ostream
{
template<typename _Ch, typename _Up>
- static true_type __check(basic_ostream<_Ch, _Up>*);
+ static basic_ostream<_Ch, _Up>& __check(basic_ostream<_Ch, _Up>*);
- static false_type __check(void*);
+ static void __check(void*);
public:
- using type = decltype(__check(declval<_Tp*>()));
+ using stream_type = decltype(__check(declval<_Tp*>()));
+ using type = __not_<is_same<stream_type, void>>;
constexpr static bool value = type::value;
};
@@ -650,8 +651,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__is_convertible_to_basic_ostream<
typename remove_reference<_Ostream>::type>,
__is_insertable<_Ostream&, const _Tp&>>::value,
- _Ostream&>::type
- //basic_ostream<_CharT, _Traits>&
+ typename __is_convertible_to_basic_ostream<
+ typename
+ remove_reference<_Ostream>::type>::stream_type>::type
operator<<(_Ostream&& __os, const _Tp& __x)
{
__os << __x;
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [v3 PATCH] Fix testsuite failures caused by the patch implementing LWG 2534.
2016-11-30 15:58 [v3 PATCH] Fix testsuite failures caused by the patch implementing LWG 2534 Ville Voutilainen
@ 2016-11-30 16:25 ` Jonathan Wakely
2016-12-01 5:38 ` Markus Trippelsdorf
0 siblings, 1 reply; 7+ messages in thread
From: Jonathan Wakely @ 2016-11-30 16:25 UTC (permalink / raw)
To: Ville Voutilainen; +Cc: libstdc++, gcc-patches
On 30/11/16 17:58 +0200, Ville Voutilainen wrote:
> Fix testsuite failures caused by the patch implementing LWG 2534.
> * include/std/istream (__is_convertible_to_basic_istream):
> Change the return types of __check, introduce stream_type.
> (operator>>(_Istream&&, _Tp&&)):
> Use __is_convertible_to_basic_istream::stream_type as the return type.
> * include/std/ostream (__is_convertible_to_basic_ostream):
> Change the return types of __check, introduce stream_type.
> (operator>>(_Ostream&&, _Tp&&)):
> Use __is_convertible_to_basic_ostream::stream_type as the return type.
As discussed on IRC, please change "stream_type" to istream_type and
ostream_type, as appropriate, because those names are already used by
stream iterators, so users can't define them as macros.
And you could make the remove_reference happen inside the
__is_convertible_to_basic_[io]stream trait, since it's only ever used
with references, but that seems stylistic.
OK with the stream_type renaming.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [v3 PATCH] Fix testsuite failures caused by the patch implementing LWG 2534.
2016-11-30 16:25 ` Jonathan Wakely
@ 2016-12-01 5:38 ` Markus Trippelsdorf
2016-12-01 6:11 ` Ville Voutilainen
0 siblings, 1 reply; 7+ messages in thread
From: Markus Trippelsdorf @ 2016-12-01 5:38 UTC (permalink / raw)
To: Jonathan Wakely; +Cc: Ville Voutilainen, libstdc++, gcc-patches
On 2016.11.30 at 16:25 +0000, Jonathan Wakely wrote:
> On 30/11/16 17:58 +0200, Ville Voutilainen wrote:
> > Fix testsuite failures caused by the patch implementing LWG 2534.
> > * include/std/istream (__is_convertible_to_basic_istream):
> > Change the return types of __check, introduce stream_type.
> > (operator>>(_Istream&&, _Tp&&)):
> > Use __is_convertible_to_basic_istream::stream_type as the return type.
> > * include/std/ostream (__is_convertible_to_basic_ostream):
> > Change the return types of __check, introduce stream_type.
> > (operator>>(_Ostream&&, _Tp&&)):
> > Use __is_convertible_to_basic_ostream::stream_type as the return type.
>
> As discussed on IRC, please change "stream_type" to istream_type and
> ostream_type, as appropriate, because those names are already used by
> stream iterators, so users can't define them as macros.
>
> And you could make the remove_reference happen inside the
> __is_convertible_to_basic_[io]stream trait, since it's only ever used
> with references, but that seems stylistic.
>
> OK with the stream_type renaming.
It breaks building Firefox:
In file included from ../../dist/system_wrappers/ostream:4:0,
from ../../dist/stl_wrappers/ostream:55,
from /home/trippels/gcc_test/usr/local/include/c++/7.0.0/iterator:64,
from ../../dist/system_wrappers/iterator:4,
from ../../dist/stl_wrappers/iterator:55,
from /home/trippels/gcc_test/usr/local/include/c++/7.0.0/backward/hashtable.h:63,
from /home/trippels/gcc_test/usr/local/include/c++/7.0.0/ext/hash_map:64,
from /home/trippels/gecko-dev/ipc/chromium/src/base/hash_tables.h:43,
from /home/trippels/gecko-dev/ipc/chromium/src/base/file_path.h:72,
from /home/trippels/gecko-dev/ipc/chromium/src/chrome/common/ipc_message_utils.h:12,
from ../../dist/include/ipc/IPCMessageUtils.h:11,
from ../../dist/include/mozilla/ipc/Transport_posix.h:11,
from ../../dist/include/mozilla/ipc/Transport.h:15,
from /home/trippels/gecko-dev/ipc/glue/BackgroundChild.h:10,
from /home/trippels/gecko-dev/ipc/glue/BackgroundImpl.cpp:5,
from /home/trippels/moz-build-dir/ipc/glue/Unified_cpp_ipc_glue0.cpp:2:
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream: In instantiation of âstruct std::__is_convertible_to_basic_ostream<const mozilla::unused_t&>â:
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:656:5: required by substitution of âtemplate<class _Ostream, class _Tp> typename std::enable_if<std::__and_<std::__not_<std::is_lvalue_reference<_Tp> >, std::__is_convertible_to_basic_ostream<_Ostream>, std::__is_insertable<_Ostream&, const _Tp&, void> >::value, typename std::__is_convertible_to_basic_ostream<_Tp>::ostream_type>::type std::operator<<(_Ostream&&, const _Tp&) [with _Ostream = const mozilla::unused_t&; _Tp = {anonymous}::ParentImpl*]â
../../dist/include/nsCOMPtr.h:185:13: required from âvoid operator<<(const mozilla::unused_t&, const already_AddRefed<{anonymous}::ParentImpl>&)â
/home/trippels/gecko-dev/ipc/glue/BackgroundImpl.cpp:1981:32: required from here
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:625:23: error: no matching function for call to âstd::__is_convertible_to_basic_ostream<const mozilla::unused_t&>::__check(const mozilla::unused_t*)â
decltype(__check(declval<typename remove_reference<_Tp>::type*>()));
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:620:37: note: candidate: template<class _Ch, class _Up> static std::basic_ostream<_Ch, _Up>& std::__is_convertible_to_basic_ostream<_Tp>::__check(std::basic_ostream<_Ch, _Up>*) [with _Ch = _Ch; _Up = _Up; _Tp = const mozilla::unused_t&]
static basic_ostream<_Ch, _Up>& __check(basic_ostream<_Ch, _Up>*);
^~~~~~~
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:620:37: note: template argument deduction/substitution failed:
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:625:23: note: types âstd::basic_ostream<_CharT, _Traits>â and âconst mozilla::unused_tâ have incompatible cv-qualifiers
decltype(__check(declval<typename remove_reference<_Tp>::type*>()));
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:622:17: note: candidate: static void std::__is_convertible_to_basic_ostream<_Tp>::__check(void*) [with _Tp = const mozilla::unused_t&] <near match>
static void __check(void*);
^~~~~~~
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:622:17: note: conversion of argument 1 would be ill-formed:
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:625:23: error: invalid conversion from âconst void*â to âvoid*â [-fpermissive]
decltype(__check(declval<typename remove_reference<_Tp>::type*>()));
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:625:23: error: no matching function for call to âstd::__is_convertible_to_basic_ostream<const mozilla::unused_t&>::__check(const mozilla::unused_t*)â
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:620:37: note: candidate: template<class _Ch, class _Up> static std::basic_ostream<_Ch, _Up>& std::__is_convertible_to_basic_ostream<_Tp>::__check(std::basic_ostream<_Ch, _Up>*) [with _Ch = _Ch; _Up = _Up; _Tp = const mozilla::unused_t&]
static basic_ostream<_Ch, _Up>& __check(basic_ostream<_Ch, _Up>*);
^~~~~~~
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:620:37: note: template argument deduction/substitution failed:
/home/trippels/gcc_test/usr/local/include/c++/7.0.0/ostream:625:23: note: types âstd::basic_ostream<_CharT, _Traits>â and âconst mozilla::unused_tâ have incompatible cv-qualifiers
decltype(__check(declval<typename remove_reference<_Tp>::type*>()));
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
Markus
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [v3 PATCH] Fix testsuite failures caused by the patch implementing LWG 2534.
2016-12-01 5:38 ` Markus Trippelsdorf
@ 2016-12-01 6:11 ` Ville Voutilainen
2016-12-01 6:45 ` Markus Trippelsdorf
0 siblings, 1 reply; 7+ messages in thread
From: Ville Voutilainen @ 2016-12-01 6:11 UTC (permalink / raw)
To: Markus Trippelsdorf; +Cc: Jonathan Wakely, libstdc++, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 556 bytes --]
On 1 December 2016 at 07:38, Markus Trippelsdorf <markus@trippelsdorf.de> wrote:
> It breaks building Firefox:
Sigh, when writing a trait, write a proper trait. Does this patch fix
the problem?
2016-12-01 Ville Voutilainen <ville.voutilainen@gmail.com>
The convertible_to traits need to use a variadic catch-all for the
false-cases.
* include/std/istream (__is_convertible_to_basic_istream):
Change the parameter of the false-case of __check to a variadic.
* include/std/ostream (__is_convertible_to_basic_ostream):
Likewise.
[-- Attachment #2: lwg2534_fix_trait.diff --]
[-- Type: text/plain, Size: 1077 bytes --]
diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream
index 319e226..1d77d30 100644
--- a/libstdc++-v3/include/std/istream
+++ b/libstdc++-v3/include/std/istream
@@ -915,7 +915,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Ch, typename _Up>
static basic_istream<_Ch, _Up>& __check(basic_istream<_Ch, _Up>*);
- static void __check(void*);
+ static void __check(...);
public:
using istream_type =
decltype(__check(declval<typename remove_reference<_Tp>::type*>()));
diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream
index 70fd10b..9dea778 100644
--- a/libstdc++-v3/include/std/ostream
+++ b/libstdc++-v3/include/std/ostream
@@ -619,7 +619,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Ch, typename _Up>
static basic_ostream<_Ch, _Up>& __check(basic_ostream<_Ch, _Up>*);
- static void __check(void*);
+ static void __check(...);
public:
using ostream_type =
decltype(__check(declval<typename remove_reference<_Tp>::type*>()));
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [v3 PATCH] Fix testsuite failures caused by the patch implementing LWG 2534.
2016-12-01 6:11 ` Ville Voutilainen
@ 2016-12-01 6:45 ` Markus Trippelsdorf
2016-12-01 7:14 ` Ville Voutilainen
0 siblings, 1 reply; 7+ messages in thread
From: Markus Trippelsdorf @ 2016-12-01 6:45 UTC (permalink / raw)
To: Ville Voutilainen; +Cc: Jonathan Wakely, libstdc++, gcc-patches
On 2016.12.01 at 08:11 +0200, Ville Voutilainen wrote:
> On 1 December 2016 at 07:38, Markus Trippelsdorf <markus@trippelsdorf.de> wrote:
> > It breaks building Firefox:
>
> Sigh, when writing a trait, write a proper trait. Does this patch fix
> the problem?
Yes it does. Thank you.
--
Markus
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [v3 PATCH] Fix testsuite failures caused by the patch implementing LWG 2534.
2016-12-01 6:45 ` Markus Trippelsdorf
@ 2016-12-01 7:14 ` Ville Voutilainen
2016-12-01 7:17 ` Ville Voutilainen
0 siblings, 1 reply; 7+ messages in thread
From: Ville Voutilainen @ 2016-12-01 7:14 UTC (permalink / raw)
To: Markus Trippelsdorf; +Cc: Jonathan Wakely, libstdc++, gcc-patches
On 1 December 2016 at 08:45, Markus Trippelsdorf <markus@trippelsdorf.de> wrote:
> On 2016.12.01 at 08:11 +0200, Ville Voutilainen wrote:
>> On 1 December 2016 at 07:38, Markus Trippelsdorf <markus@trippelsdorf.de> wrote:
>> > It breaks building Firefox:
>>
>> Sigh, when writing a trait, write a proper trait. Does this patch fix
>> the problem?
>
> Yes it does. Thank you.
Committed as obvious-enough.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [v3 PATCH] Fix testsuite failures caused by the patch implementing LWG 2534.
2016-12-01 7:14 ` Ville Voutilainen
@ 2016-12-01 7:17 ` Ville Voutilainen
0 siblings, 0 replies; 7+ messages in thread
From: Ville Voutilainen @ 2016-12-01 7:17 UTC (permalink / raw)
To: Markus Trippelsdorf; +Cc: Jonathan Wakely, libstdc++, gcc-patches
On 1 December 2016 at 09:14, Ville Voutilainen
<ville.voutilainen@gmail.com> wrote:
>> Yes it does. Thank you.
> Committed as obvious-enough.
Also, if this change causes one more problem I'm reverting all of it,
we _are_ in stage 3 and this sort of churn
is not exactly desirable. I'm currently hiding in a basement so as to
avoid the wrath of release managers anyway. :)
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-12-01 7:17 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-30 15:58 [v3 PATCH] Fix testsuite failures caused by the patch implementing LWG 2534 Ville Voutilainen
2016-11-30 16:25 ` Jonathan Wakely
2016-12-01 5:38 ` Markus Trippelsdorf
2016-12-01 6:11 ` Ville Voutilainen
2016-12-01 6:45 ` Markus Trippelsdorf
2016-12-01 7:14 ` Ville Voutilainen
2016-12-01 7:17 ` Ville Voutilainen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).