mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24: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_string_list_t *list);
|
||||
|
||||
#pragma GCC visibility pop
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue