https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80553
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
We can't change the silly rule, but I suppose we could do:
--- a/libstdc++-v3/include/bits/stl_construct.h
+++ b/libstdc++-v3/include/bits/stl_construct.h
@@ -114,7 +114,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
template<typename _ForwardIterator>
static void
- __destroy(_ForwardIterator, _ForwardIterator) { }
+ __destroy(_ForwardIterator, _ForwardIterator)
+ {
+#if __cplusplus >= 201103L
+ using _Tp
+ = typename std::iterator_traits<_ForwardIterator>::value_type;
+ static_assert( std::is_destructible<_Tp>::value,
+ "type must be destructible" );
+#endif
+ }
};
/**
So we get a diagnostic for trying to destroy something that isn't destructible.