configure: check typeof on C++ compilers

C compilers can have GNU extensions to support typeof in C code, but
some C++ compilers like clang are removing the builtin since decltype
can be used in C++ without the constraints from typeof. Decltype is not
100% equivalent for this reason: references will be kept in the returned
type.

The check in m4/typeof.m4 comes from graydon/monotone and dovecot/core
and was slightly modified to namespace the define for C++ code.
This commit is contained in:
Alexandre Janniaux 2022-05-18 11:15:32 +02:00 committed by Hugo Beauzée-Luyssen
parent 0caa9ea0e6
commit 784c324571
2 changed files with 23 additions and 0 deletions

View File

@ -68,7 +68,10 @@ dnl Check for compiler properties
AC_C_CONST
AC_C_INLINE
AC_C_RESTRICT
AC_LANG_PUSH([C++])
AX_CXX_COMPILE_STDCXX_14([noext], [mandatory])
AX_CXX_TYPEOF
AC_LANG_POP([C++])
dnl Extend the --help string at the current spot.
AC_DEFUN([EXTEND_HELP_STRING], [m4_divert_once([HELP_ENABLE], [$1])])

20
m4/typeof.m4 Normal file
View File

@ -0,0 +1,20 @@
dnl @synopsis AX_CXX_TYPEOF
dnl
dnl tests for the presence of the gcc hashmap stl extension
dnl
dnl @author Patrick Mauritz <oxygene@studentenbude.ath.cx>
dnl @version 2005-08-15
dnl @license AllPermissive
AC_DEFUN([AX_CXX_TYPEOF],[
AC_LANG_ASSERT([C++])
AC_CACHE_CHECK(whether the C++ compiler supports typeof,
ac_cv_cxx_typeof,
[AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ int x; typeof (x) y[6]; ]])],
[ac_cv_cxx_typeof=yes],
[ac_cv_cxx_typeof=no])
])
if test "$ac_cv_cxx_typeof" = yes; then
AC_DEFINE(HAVE_CXX_TYPEOF, 1, [Define if the compiler supports typeof.])
fi
])