@@ -188,15 +188,19 @@ is a lexical C<$_> in scope.
188188
189189#define dXSI32 I32 ix = XSANY.any_i32
190190
191- #ifdef __cplusplus
192- # define XSINTERFACE_CVT (ret,name ) ret (*name)(...)
193- # define XSINTERFACE_CVT_ANON (ret ) ret (*)(...)
191+ #if __STDC_VERSION__ >= 202311L || defined(__GNUC__)
192+ # define XSINTERFACE_CVT (ret, name, example_func_name ) typeof (&example_func_name) name
193+ # define XSINTERFACE_CVT_ANON (ret, example_func_name ) typeof (&example_func_name)
194+ #elif defined(__cplusplus)
195+ # define XSINTERFACE_CVT (ret, name, example_func_name ) decltype (&example_func_name) name
196+ # define XSINTERFACE_CVT_ANON (ret, example_func_name ) decltype (&example_func_name)
194197#else
195- # define XSINTERFACE_CVT (ret,name ) ret (*name)()
196- # define XSINTERFACE_CVT_ANON (ret ) ret (*)()
198+ # define XSINTERFACE_CVT (ret,name, example_func_name ) ret (*name)()
199+ # define XSINTERFACE_CVT_ANON (ret, example_func_name ) ret (*)()
197200#endif
198- #define dXSFUNCTION (ret ) XSINTERFACE_CVT(ret,XSFUNCTION)
199- #define XSINTERFACE_FUNC (ret,cv,f ) ((XSINTERFACE_CVT_ANON(ret))(f))
201+
202+ #define dXSFUNCTION (ret, example_func_name ) XSINTERFACE_CVT(ret, XSFUNCTION, example_func_name)
203+ #define XSINTERFACE_FUNC (ret,cv,f,example_func_name ) ((XSINTERFACE_CVT_ANON(ret, example_func_name))(f))
200204#define XSINTERFACE_FUNC_SET (cv,f ) \
201205 CvXSUBANY (cv).any_dxptr = (void (*) (pTHX_ void *))(f)
202206
0 commit comments