X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=build-aux%2Fc%2B%2Bdefs.h;h=7fbdd9636482b5001d3a1407ceae03aa8343ebbb;hb=e29e3289d862d3fd69a9b74cbff6668262241f24;hp=80ce7ace5e58d91150b8af249eced055d66fe942;hpb=7a71b4e64715272eeb705ac485ee2c2952de5f16;p=gnulib.git diff --git a/build-aux/c++defs.h b/build-aux/c++defs.h index 80ce7ace5..7fbdd9636 100644 --- a/build-aux/c++defs.h +++ b/build-aux/c++defs.h @@ -176,28 +176,34 @@ are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static rettype (*func) parameters = \ reinterpret_cast( \ - reinterpret_cast(::func)); \ + (rettype2(*)parameters2)(::func)); \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else -# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when - GNULIB_NAMESPACE::func is used. */ + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ - _GL_CXXALIASWARN1 (func, GNULIB_NAMESPACE) -# define _GL_CXXALIASWARN1(func,namespace) \ - _GL_CXXALIASWARN2 (func, namespace) -# define _GL_CXXALIASWARN2(func,namespace) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +# define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") @@ -206,4 +212,22 @@ _GL_EXTERN_C int _gl_cxxalias_dummy #endif +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + #endif /* _GL_CXXDEFS_H */