diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2021-08-26 13:13:27 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2021-08-27 00:12:54 +0100 |
commit | 8cf428bfd3ca967b3d135e311d3e391998a39335 (patch) | |
tree | 374a32287341e906b31c7e5f5969cb7dfc5fbb7a | |
parent | 5889e842ae4df48ac471c47d6ed72e05041a1db8 (diff) | |
download | gcc-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.h | 6 |
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)) |