}
}
-void operator delete (void *p)
+#if __cplusplus >= 201103L
+#define NOEXCEPT noexcept
+#else
+#define NOEXCEPT
+#endif
+
+void operator delete (void *p) NOEXCEPT
{
++delete_called;
if (p)
return operator new(n);
}
-void operator delete[] (void *p)
+void operator delete[] (void *p) NOEXCEPT
{
++delete_vec_called;
operator delete(p);
}
#if __cplusplus >= 201402L
-void operator delete (void *p, std::size_t)
+void operator delete (void *p, std::size_t) noexcept
{
::operator delete(p);
}
-void operator delete[] (void *p, std::size_t)
+void operator delete[] (void *p, std::size_t) noexcept
{
::operator delete[](p);
}
// { dg-do run { target c++17 } }
+// { dg-options "-Wno-init-list-lifetime" }
// Copyright (C) 2020-2022 Free Software Foundation, Inc.
//
// { dg-do run { target c++17 } }
+// { dg-options "-Wno-init-list-lifetime" }
// Copyright (C) 2020-2022 Free Software Foundation, Inc.
//
d(nullptr); // { dg-error "here" }
// { dg-error "delete pointer to incomplete type" "" { target *-*-* } 0 }
}
+
+// { dg-prune-output "invalid application of 'sizeof' to a void type" }
+// { dg-prune-output "deleting 'void*' is undefined" }
template<class Ptr> struct pointer_traits;
template<class T> struct pointer_traits<T*>;
- void* align(size_t alignment, size_t size, void*& ptr, size_t& space);
+ void* align(size_t alignment, size_t size, void*& ptr, size_t& space) noexcept;
struct allocator_arg_t;
extern const allocator_arg_t allocator_arg;
using std::shared_ptr;
using std::is_constructible;
static_assert(!is_constructible<shared_ptr<void>, const void*>::value, "");
+
+// { dg-prune-output "invalid application of 'sizeof' to a void type" }
return p;
}
-void operator delete(void* p) { std::free(p); }
-void operator delete(void* p, std::size_t) { std::free(p); }
+void operator delete(void* p) noexcept { std::free(p); }
+void operator delete(void* p, std::size_t) noexcept { std::free(p); }
void
test01()
return std::malloc(n);
}
-void operator delete(void* p)
+void operator delete(void* p) noexcept
{
std::free(p);
}
-void operator delete(void* p, std::size_t)
+void operator delete(void* p, std::size_t) noexcept
{
std::free(p);
}
return std::malloc(n);
}
-void operator delete(void* p)
+void operator delete(void* p) noexcept
{
std::free(p);
}
-void operator delete(void* p, std::size_t)
+void operator delete(void* p, std::size_t) noexcept
{
std::free(p);
}
return std::malloc(n);
}
-void operator delete(void* p)
+void operator delete(void* p) noexcept
{
std::free(p);
}
-void operator delete(void* p, std::size_t)
+void operator delete(void* p, std::size_t) noexcept
{
std::free(p);
}
template<class C> auto end(C& c) -> decltype(c.end());
template<class C> auto end(const C& c) -> decltype(c.end());
- template<class T, size_t N> T* begin(T (&array)[N]);
- template<class T, size_t N> T* end(T (&array)[N]);
+ template<class T, size_t N> T* begin(T (&array)[N]) noexcept;
+ template<class T, size_t N> T* end(T (&array)[N]) noexcept;
}
template<class C> auto end(C& c) -> decltype(c.end());
template<class C> auto end(const C& c) -> decltype(c.end());
- template<class T, size_t N> constexpr T* begin(T (&array)[N]);
- template<class T, size_t N> constexpr T* end(T (&array)[N]);
+ template<class T, size_t N> constexpr T* begin(T (&array)[N]) noexcept;
+ template<class T, size_t N> constexpr T* end(T (&array)[N]) noexcept;
template<class C> auto cbegin(const C& c) -> decltype(c.begin());
template<class C> auto cend(const C& c) -> decltype(c.end());
template<class C> auto rend(const C& c) -> decltype(c.rend());
template<class T, size_t N>
- reverse_iterator<T*> rbegin(T (&array)[N]);
+ reverse_iterator<T*> rbegin(T (&array)[N]) noexcept;
template<class T, size_t N>
- reverse_iterator<T*> rend(T (&array)[N]);
+ reverse_iterator<T*> rend(T (&array)[N]) noexcept;
template<class E>
- reverse_iterator<const E*> rbegin(initializer_list<E>);
+ reverse_iterator<const E*> rbegin(initializer_list<E>) noexcept;
template<class E>
- reverse_iterator<const E*> rend(initializer_list<E>);
+ reverse_iterator<const E*> rend(initializer_list<E>) noexcept;
template<class C>
auto crbegin(const C& c) -> decltype(std::rbegin(c));
template<class C> constexpr auto end(C& c) -> decltype(c.end());
template<class C> constexpr auto end(const C& c) -> decltype(c.end());
- template<class T, size_t N> constexpr T* begin(T (&array)[N]);
- template<class T, size_t N> constexpr T* end(T (&array)[N]);
+ template<class T, size_t N> constexpr T* begin(T (&array)[N]) noexcept;
+ template<class T, size_t N> constexpr T* end(T (&array)[N]) noexcept;
template<class C> constexpr auto cbegin(const C& c) -> decltype(c.begin());
template<class C> constexpr auto cend(const C& c) -> decltype(c.end());
template<class C> constexpr auto rend(const C& c) -> decltype(c.rend());
template<class T, size_t N>
- constexpr reverse_iterator<T*> rbegin(T (&array)[N]);
+ constexpr reverse_iterator<T*> rbegin(T (&array)[N]) noexcept;
template<class T, size_t N>
- constexpr reverse_iterator<T*> rend(T (&array)[N]);
+ constexpr reverse_iterator<T*> rend(T (&array)[N]) noexcept;
template<class E>
- constexpr reverse_iterator<const E*> rbegin(initializer_list<E>);
+ constexpr reverse_iterator<const E*> rbegin(initializer_list<E>) noexcept;
template<class E>
- constexpr reverse_iterator<const E*> rend(initializer_list<E>);
+ constexpr reverse_iterator<const E*> rend(initializer_list<E>) noexcept;
template<class C>
constexpr auto crbegin(const C& c) -> decltype(std::rbegin(c));