diff options
author | Iain Lane <iainl@gnome.org> | 2021-02-24 15:11:42 +0000 |
---|---|---|
committer | Iain Lane <iainl@gnome.org> | 2021-02-25 15:33:59 +0000 |
commit | 552b8fd862061e74b5ad2ffe6a700f850a76f797 (patch) | |
tree | 5b64c5e6820205e7afaf3ecf374c885fed9ff831 /glib/gmacros.h | |
parent | 4bfa4dddea70b7c30a0ce2742dacbbfc6ca9d0a5 (diff) | |
download | glib-552b8fd862061e74b5ad2ffe6a700f850a76f797.tar.gz |
glib/gmacros.h: Move `<type_traits>` include to consumers
When included inside an `extern "C"` block, this causes build failures
that look something like:
/usr/include/c++/10/type_traits:2930:3: error: template with C linkage
2930 | template<typename _Fn, typename... _Args>
| ^~~~~~~~
../../disas/arm-a64.cc:20:1: note: ‘extern "C"’ linkage started here
20 | extern "C" {
| ^~~~~~~~~~
Commit 4273c43902a7e6b22cea0041436ee5715c93be76 made this opt in for
projects which are defining `GLIB_VERSION_MIN_REQUIRED`, but the include
of `<type_traits>` via `gmacros.h` was not included in this. If we move
the include out to the places where `glib_typeof` is called, we can make
it covered by this macro too, and save a few consumers from FTBFSing.
That also means that, if you don't want to fix your use of the headers,
and as long as this version is sufficient for you, a quick workaround is
to define `GLIB_VERSION_MIN_REQUIRED` to `GLIB_VERSION_2_66` or lower.
Suggested by Simon McVittie.
Alternative to: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1935
Fixes: https://gitlab.gnome.org/GNOME/glib/-/issues/2331
Diffstat (limited to 'glib/gmacros.h')
-rw-r--r-- | glib/gmacros.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/glib/gmacros.h b/glib/gmacros.h index ca1ecbd0a..2ece48ba0 100644 --- a/glib/gmacros.h +++ b/glib/gmacros.h @@ -238,7 +238,12 @@ #define glib_typeof(t) __typeof__ (t) #elif defined(__cplusplus) && __cplusplus >= 201103L /* C++11 decltype() is close enough for our usage */ -#include <type_traits> +/* This needs `#include <type_traits>`, but we have guarded this feature with a + * `GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_68` check, and such a check + * cannot be enforced in this header due to include ordering requirements. + * Within GLib itself, which use `glib_typeof` need to add the include + * themselves. See other examples in GLib for how to do this. + */ #define glib_typeof(t) typename std::remove_reference<decltype (t)>::type #define glib_typeof_2_68 #endif |