Revert attempt to use 'noexcept' in typedef
This use of 'noexcept' runs afoul of the C++11 standard. Problem reported by Philipp Stephani in: http://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00706.html * src/emacs-module.c (emacs_finalizer_function): Move this typedef here ... * src/emacs-module.h: ... from here, and use only the C version of the typedef. The typedef is now private since it is never used in the .h file now and anyway it seemed to be causing more confusion than it cured. (make_user_ptr, get_user_finalizer, set_user_finalizer): Open-code the type instead.
This commit is contained in:
parent
6ad0d39680
commit
552694a265
2 changed files with 10 additions and 15 deletions
|
@ -65,6 +65,12 @@ enum
|
|||
&& INTPTR_MAX == EMACS_INT_MAX)
|
||||
};
|
||||
|
||||
/* Function prototype for module user-pointer finalizers. These
|
||||
should not throw C++ exceptions, so emacs-module.h declares the
|
||||
corresponding interfaces with EMACS_NOEXCEPT. There is only C code
|
||||
in this module, though, so this constraint is not enforced here. */
|
||||
typedef void (*emacs_finalizer_function) (void *);
|
||||
|
||||
|
||||
/* Private runtime and environment members. */
|
||||
|
||||
|
|
|
@ -26,19 +26,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
#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
|
||||
|
@ -184,17 +173,17 @@ struct emacs_env_25
|
|||
|
||||
/* Embedded pointer type. */
|
||||
emacs_value (*make_user_ptr) (emacs_env *env,
|
||||
emacs_finalizer_function fin,
|
||||
void (*fin) (void *) EMACS_NOEXCEPT,
|
||||
void *ptr);
|
||||
|
||||
void *(*get_user_ptr) (emacs_env *env, emacs_value uptr);
|
||||
void (*set_user_ptr) (emacs_env *env, emacs_value uptr, void *ptr);
|
||||
|
||||
emacs_finalizer_function (*get_user_finalizer) (emacs_env *env,
|
||||
emacs_value uptr);
|
||||
void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr))
|
||||
(void *) EMACS_NOEXCEPT;
|
||||
void (*set_user_finalizer) (emacs_env *env,
|
||||
emacs_value uptr,
|
||||
emacs_finalizer_function fin);
|
||||
void (*fin) (void *) EMACS_NOEXCEPT);
|
||||
|
||||
/* Vector functions. */
|
||||
emacs_value (*vec_get) (emacs_env *env, emacs_value vec, ptrdiff_t i);
|
||||
|
|
Loading…
Add table
Reference in a new issue