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:
Paul Eggert 2016-01-10 21:39:55 -08:00
parent 6ad0d39680
commit 552694a265
2 changed files with 10 additions and 15 deletions

View file

@ -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. */

View file

@ -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);