aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2021-08-26 13:13:27 +0100
committerJonathan Wakely <jwakely@redhat.com>2021-08-27 00:12:54 +0100
commit8cf428bfd3ca967b3d135e311d3e391998a39335 (patch)
tree374a32287341e906b31c7e5f5969cb7dfc5fbb7a
parent5889e842ae4df48ac471c47d6ed72e05041a1db8 (diff)
downloadgcc-8cf428bfd3ca967b3d135e311d3e391998a39335.zip
gcc-8cf428bfd3ca967b3d135e311d3e391998a39335.tar.gz
gcc-8cf428bfd3ca967b3d135e311d3e391998a39335.tar.bz2
libstdc++: Add static assertions for std::function requirements
Add static assertions to std::function, so that more user-friendly diagnostics are given when trying to store a non-copyable target object. These preconditions were added as "Mandates:" by LWG 2447, but I'm committing them separately from implementing that, to allow just this change to be backported more easily. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/bits/std_function.h (function::function(F)): Add static assertions to check constructibility requirements.
-rw-r--r--libstdc++-v3/include/bits/std_function.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/libstdc++-v3/include/bits/std_function.h b/libstdc++-v3/include/bits/std_function.h
index fb86ff1..e081cd8 100644
--- a/libstdc++-v3/include/bits/std_function.h
+++ b/libstdc++-v3/include/bits/std_function.h
@@ -422,6 +422,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
function(_Functor __f)
: _Function_base()
{
+ static_assert(is_copy_constructible<_Functor>::value,
+ "std::function target must be copy-constructible");
+ static_assert(is_constructible<_Functor, _Functor>::value,
+ "std::function target must be constructible from the "
+ "constructor argument");
+
using _My_handler = _Function_handler<_Res(_ArgTypes...), _Functor>;
if (_My_handler::_M_not_empty_function(__f))