diff options
author | Kjell Ahlstedt <kjellahlstedt@gmail.com> | 2018-07-13 18:59:01 +0200 |
---|---|---|
committer | Kjell Ahlstedt <kjellahlstedt@gmail.com> | 2018-07-13 18:59:01 +0200 |
commit | fa85bd1161d5d914095d1a3f9b620da294c9af79 (patch) | |
tree | b7968ff9f236ef05129b2d24179949dd6af02961 /tests | |
parent | e30044809d3de348fd44f66940a3840accc49a83 (diff) | |
download | glibmm-fa85bd1161d5d914095d1a3f9b620da294c9af79.tar.gz |
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
Diffstat (limited to 'tests')
-rw-r--r-- | tests/giomm_stream_vfuncs/main.cc | 2 | ||||
-rw-r--r-- | tests/glibmm_vector/main.cc | 13 |
2 files changed, 12 insertions, 3 deletions
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<GFunc>(g_object_unref), nullptr); + g_list_foreach(glist_, u.pf, nullptr); g_list_free(glist_); } if (gslist_) { - g_slist_foreach(gslist_, reinterpret_cast<GFunc>(g_object_unref), nullptr); + g_slist_foreach(gslist_, u.pf, nullptr); g_slist_free(gslist_); } if (garray_) |