Merge pull request #3993 from pgroke-dt:work-around-GCC-11-ADL-bug
PiperOrigin-RevId: 523706897 Change-Id: If6dcc97c81a20f8fe675241518ae1d6cf23ebf39
This commit is contained in:
commit
12a5852e45
@ -206,12 +206,13 @@ struct StreamPrinter {
|
|||||||
// Don't accept member pointers here. We'd print them via implicit
|
// Don't accept member pointers here. We'd print them via implicit
|
||||||
// conversion to bool, which isn't useful.
|
// conversion to bool, which isn't useful.
|
||||||
typename = typename std::enable_if<
|
typename = typename std::enable_if<
|
||||||
!std::is_member_pointer<T>::value>::type,
|
!std::is_member_pointer<T>::value>::type>
|
||||||
// Only accept types for which we can find a streaming operator via
|
// Only accept types for which we can find a streaming operator via
|
||||||
// ADL (possibly involving implicit conversions).
|
// ADL (possibly involving implicit conversions).
|
||||||
typename = decltype(std::declval<std::ostream&>()
|
// (Use SFINAE via return type, because it seems GCC < 12 doesn't handle name
|
||||||
<< std::declval<const T&>())>
|
// lookup properly when we do it in the template parameter list.)
|
||||||
static void PrintValue(const T& value, ::std::ostream* os) {
|
static auto PrintValue(const T& value, ::std::ostream* os)
|
||||||
|
-> decltype((void)(*os << value)) {
|
||||||
// Call streaming operator found by ADL, possibly with implicit conversions
|
// Call streaming operator found by ADL, possibly with implicit conversions
|
||||||
// of the arguments.
|
// of the arguments.
|
||||||
*os << value;
|
*os << value;
|
||||||
|
Loading…
Reference in New Issue
Block a user