From fa85bd1161d5d914095d1a3f9b620da294c9af79 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Fri, 13 Jul 2018 18:59:01 +0200 Subject: Avoid compiler warnings from function pointer conversions gcc8 -Wextra prints a warning when reinterpret_cast is used for conversion between different types of function pointers. Avoid that by instead using a union with members of the two types of function pointers. See https://github.com/libsigcplusplus/libsigcplusplus/issues/1 --- tests/giomm_stream_vfuncs/main.cc | 2 +- tests/glibmm_vector/main.cc | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/giomm_stream_vfuncs/main.cc b/tests/giomm_stream_vfuncs/main.cc index df1cde20..ad42e989 100644 --- a/tests/giomm_stream_vfuncs/main.cc +++ b/tests/giomm_stream_vfuncs/main.cc @@ -160,7 +160,7 @@ int main(int, char**) return EXIT_FAILURE; } } - catch (Gio::Error e) + catch (const Gio::Error& e) { std::cout << "Gio error: " << e.what() << std::endl; return EXIT_FAILURE; diff --git a/tests/glibmm_vector/main.cc b/tests/glibmm_vector/main.cc index 31138cf0..0f039356 100644 --- a/tests/glibmm_vector/main.cc +++ b/tests/glibmm_vector/main.cc @@ -196,14 +196,23 @@ public: ~Cache() { + // Conversion between different types of function pointers with + // reinterpret_cast can make gcc8 print a warning. + // https://github.com/libsigcplusplus/libsigcplusplus/issues/1 + union { + GFunc pf; + decltype(&g_object_unref) pou; + } u; + u.pou = &g_object_unref; + if (glist_) { - g_list_foreach(glist_, reinterpret_cast(g_object_unref), nullptr); + g_list_foreach(glist_, u.pf, nullptr); g_list_free(glist_); } if (gslist_) { - g_slist_foreach(gslist_, reinterpret_cast(g_object_unref), nullptr); + g_slist_foreach(gslist_, u.pf, nullptr); g_slist_free(gslist_); } if (garray_) -- cgit v1.2.1