Take the same exception specification as for std::free. Without that, Intel icc
fails to compile simgrid::xbt::demangle (backtrace.cpp) with:
error \#878: incompatible exception specifications
@hideinitializer */
#define xbt_free(p) free(p) /*nothing specific to do here. A poor valgrind replacement? */
+#ifdef __cplusplus
+#define XBT_FREE_NOEXCEPT noexcept(noexcept(std::free))
+#else
+#define XBT_FREE_NOEXCEPT
+#endif
+
/** @brief like free, but you can be sure that it is a function */
-XBT_PUBLIC void xbt_free_f(void* p);
+XBT_PUBLIC void xbt_free_f(void* p) XBT_FREE_NOEXCEPT;
/** @brief should be given a pointer to pointer, and frees the second one */
-XBT_PUBLIC void xbt_free_ref(void* d);
+XBT_PUBLIC void xbt_free_ref(void* d) XBT_FREE_NOEXCEPT;
SG_END_DECL()
/* these two functions belong to xbt/sysdep.h, which have no corresponding .c file */
/** @brief like xbt_free, but you can be sure that it is a function */
-void xbt_free_f(void *p)
+void xbt_free_f(void* p) noexcept(noexcept(std::free))
{
xbt_free(p);
}
/** @brief should be given a pointer to pointer, and frees the second one */
-void xbt_free_ref(void *d)
+void xbt_free_ref(void* d) noexcept(noexcept(std::free))
{
xbt_free(*(void**)d);
}