/* emacs-module.h - GNU Emacs module API.
-Copyright (C) 2015 Free Software Foundation, Inc.
+Copyright (C) 2015-2016 Free Software Foundation, Inc.
This file is part of GNU Emacs.
#if defined __cplusplus && __cplusplus >= 201103L
# define EMACS_NOEXCEPT noexcept
+
+/* Function prototype for module user-pointer finalizers.
+
+ NOTE: C++11 15.4: An exception-specification shall not appear in a
+ typedef declaration or alias-declaration.
+
+*/
+void emacs_dummy_finalizer_function (void *) noexcept;
+typedef decltype(emacs_dummy_finalizer_function) *emacs_finalizer_function;
+
#else
# define EMACS_NOEXCEPT
+typedef void (*emacs_finalizer_function) (void *);
#endif
#ifdef __cplusplus
/* Current environment. */
typedef struct emacs_env_25 emacs_env;
-/* Opaque structure pointer representing an Emacs Lisp value. */
+/* Opaque pointer representing an Emacs Lisp value.
+ BEWARE: Do not assume NULL is a valid value! */
typedef struct emacs_value_tag *emacs_value;
enum emacs_arity { emacs_variadic_function = -2 };
typedef emacs_value (*emacs_subr) (emacs_env *env, ptrdiff_t nargs,
emacs_value args[], void *data);
-/* Function prototype for module user-pointer finalizers. */
-typedef void (*emacs_finalizer_function) (void *);
-
/* Possible Emacs function call outcomes. */
enum emacs_funcall_exit
{
/* Embedded pointer type. */
emacs_value (*make_user_ptr) (emacs_env *env,
- void (*fin) (void *) EMACS_NOEXCEPT,
+ emacs_finalizer_function fin,
void *ptr);
void *(*get_user_ptr) (emacs_env *env, emacs_value uptr);
void (*set_user_ptr) (emacs_env *env, emacs_value uptr, void *ptr);
- void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr))
- (void *) EMACS_NOEXCEPT;
+ emacs_finalizer_function (*get_user_finalizer) (emacs_env *env,
+ emacs_value uptr);
void (*set_user_finalizer) (emacs_env *env,
emacs_value uptr,
- void (*fin) (void *) EMACS_NOEXCEPT);
+ emacs_finalizer_function fin);
/* Vector functions. */
emacs_value (*vec_get) (emacs_env *env, emacs_value vec, ptrdiff_t i);