PR libstdc++/93470 * include/bits/refwrap.h (reference_wrapper::operator()): Restrict static assertion to object types.
Tested powerpc64le-linux and verified with Clang. Committed to master. Backport to gcc-9-branch needed too.
commit 72a9fd209b6db3b5f81fbb008e22ea93c00465e5 Author: Jonathan Wakely <jwak...@redhat.com> Date: Tue Jan 28 13:24:09 2020 +0000 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. 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<type>) + static_assert(sizeof(type), "type must be complete"); #endif return std::__invoke(get(), std::forward<_Args>(__args)...); }