From 72a9fd209b6db3b5f81fbb008e22ea93c00465e5 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 28 Jan 2020 13:24:09 +0000 Subject: [PATCH] libstdc++: Avoid using sizeof with function types (PR 93470) PR libstdc++/93470 * include/bits/refwrap.h (reference_wrapper::operator()): Restrict static assertion to object types. --- libstdc++-v3/ChangeLog | 4 ++++ libstdc++-v3/include/bits/refwrap.h | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index d75ebbc3662..c72d4a43c80 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -10,6 +10,10 @@ 2020-01-28 Jonathan Wakely + PR libstdc++/93470 + * include/bits/refwrap.h (reference_wrapper::operator()): Restrict + static assertion to object types. + PR libstdc++/93325 * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Use AC_SEARCH_LIBS for clock_gettime instead of explicit glibc version check. diff --git a/libstdc++-v3/include/bits/refwrap.h b/libstdc++-v3/include/bits/refwrap.h index 2bcd44d3894..717aa01629c 100644 --- a/libstdc++-v3/include/bits/refwrap.h +++ b/libstdc++-v3/include/bits/refwrap.h @@ -343,7 +343,8 @@ _GLIBCXX_MEM_FN_TRAITS(&& noexcept, false_type, true_type) operator()(_Args&&... __args) const { #if __cplusplus > 201703L - static_assert(sizeof(type), "type must be complete"); + if constexpr (is_object_v) + static_assert(sizeof(type), "type must be complete"); #endif return std::__invoke(get(), std::forward<_Args>(__args)...); } -- 2.30.2