mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 17:34:54 +01:00
lib: work around talloc_steal usage from C++ code
Implicit typecast from 'void *' to 'T *' is okay in C, but not in C++. In talloc_steal, an explicit cast is provided for type safety in some GCC versions. Otherwise, a cast is required. Provide a template function for this to maintain type safety, and redefine talloc_steal to use it. The template must be outside the extern "C" block (NOTMUCH_BEGIN_DECLS and NOTMUCH_END_DECLS), but keep it within the GCC visibility #pragma. No functional changes, apart from making the library build with compilers other than recent GCC. Signed-off-by: Jani Nikula <jani@nikula.org>
This commit is contained in:
parent
cddc270346
commit
de0557477d
1 changed files with 20 additions and 2 deletions
|
@ -495,8 +495,26 @@ notmuch_filenames_t *
|
||||||
_notmuch_filenames_create (const void *ctx,
|
_notmuch_filenames_create (const void *ctx,
|
||||||
notmuch_string_list_t *list);
|
notmuch_string_list_t *list);
|
||||||
|
|
||||||
#pragma GCC visibility pop
|
|
||||||
|
|
||||||
NOTMUCH_END_DECLS
|
NOTMUCH_END_DECLS
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
/* Implicit typecast from 'void *' to 'T *' is okay in C, but not in
|
||||||
|
* C++. In talloc_steal, an explicit cast is provided for type safety
|
||||||
|
* in some GCC versions. Otherwise, a cast is required. Provide a
|
||||||
|
* template function for this to maintain type safety, and redefine
|
||||||
|
* talloc_steal to use it.
|
||||||
|
*/
|
||||||
|
#if !(__GNUC__ >= 3)
|
||||||
|
template <class T> T *
|
||||||
|
_notmuch_talloc_steal (const void *new_ctx, const T *ptr)
|
||||||
|
{
|
||||||
|
return static_cast<T *> (talloc_steal (new_ctx, ptr));
|
||||||
|
}
|
||||||
|
#undef talloc_steal
|
||||||
|
#define talloc_steal _notmuch_talloc_steal
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#pragma GCC visibility pop
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue