| # =========================================================================== |
| # http://autoconf-archive.cryp.to/ac_cxx_compile_stdcxx_0x.html |
| # =========================================================================== |
| # |
| # SYNOPSIS |
| # |
| # AC_CXX_COMPILE_STDCXX_0X |
| # |
| # DESCRIPTION |
| # |
| # Check for baseline language coverage in the compiler for the C++0x |
| # standard. |
| # |
| # LAST MODIFICATION |
| # |
| # 2008-04-17 |
| # |
| # COPYLEFT |
| # |
| # Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com> |
| # |
| # Copying and distribution of this file, with or without modification, are |
| # permitted in any medium without royalty provided the copyright notice |
| # and this notice are preserved. |
| |
| AC_DEFUN([AC_CXX_COMPILE_STDCXX_0X], [ |
| AC_CACHE_CHECK(if g++ supports C++0x features without additional flags, |
| ac_cv_cxx_compile_cxx0x_native, |
| [AC_LANG_SAVE |
| AC_LANG_CPLUSPLUS |
| AC_TRY_COMPILE([ |
| template <typename T> |
| struct check |
| { |
| static_assert(sizeof(int) <= sizeof(T), "not big enough"); |
| }; |
| |
| typedef check<check<bool>> right_angle_brackets; |
| |
| int a; |
| decltype(a) b; |
| |
| typedef check<int> check_type; |
| check_type c; |
| check_type&& cr = static_cast<check_type&&>(c);],, |
| ac_cv_cxx_compile_cxx0x_native=yes, ac_cv_cxx_compile_cxx0x_native=no) |
| AC_LANG_RESTORE |
| ]) |
| |
| AC_CACHE_CHECK(if g++ supports C++0x features with -std=c++0x, |
| ac_cv_cxx_compile_cxx0x_cxx, |
| [AC_LANG_SAVE |
| AC_LANG_CPLUSPLUS |
| ac_save_CXXFLAGS="$CXXFLAGS" |
| CXXFLAGS="$CXXFLAGS -std=c++0x" |
| AC_TRY_COMPILE([ |
| template <typename T> |
| struct check |
| { |
| static_assert(sizeof(int) <= sizeof(T), "not big enough"); |
| }; |
| |
| typedef check<check<bool>> right_angle_brackets; |
| |
| int a; |
| decltype(a) b; |
| |
| typedef check<int> check_type; |
| check_type c; |
| check_type&& cr = static_cast<check_type&&>(c);],, |
| ac_cv_cxx_compile_cxx0x_cxx=yes, ac_cv_cxx_compile_cxx0x_cxx=no) |
| CXXFLAGS="$ac_save_CXXFLAGS" |
| AC_LANG_RESTORE |
| ]) |
| |
| AC_CACHE_CHECK(if g++ supports C++0x features with -std=gnu++0x, |
| ac_cv_cxx_compile_cxx0x_gxx, |
| [AC_LANG_SAVE |
| AC_LANG_CPLUSPLUS |
| ac_save_CXXFLAGS="$CXXFLAGS" |
| CXXFLAGS="$CXXFLAGS -std=gnu++0x" |
| AC_TRY_COMPILE([ |
| template <typename T> |
| struct check |
| { |
| static_assert(sizeof(int) <= sizeof(T), "not big enough"); |
| }; |
| |
| typedef check<check<bool>> right_angle_brackets; |
| |
| int a; |
| decltype(a) b; |
| |
| typedef check<int> check_type; |
| check_type c; |
| check_type&& cr = static_cast<check_type&&>(c);],, |
| ac_cv_cxx_compile_cxx0x_gxx=yes, ac_cv_cxx_compile_cxx0x_gxx=no) |
| CXXFLAGS="$ac_save_CXXFLAGS" |
| AC_LANG_RESTORE |
| ]) |
| |
| if test "$ac_cv_cxx_compile_cxx0x_native" = yes || |
| test "$ac_cv_cxx_compile_cxx0x_cxx" = yes || |
| test "$ac_cv_cxx_compile_cxx0x_gxx" = yes; then |
| AC_DEFINE(HAVE_STDCXX_0X,,[Define if g++ supports C++0x features. ]) |
| else |
| AC_MSG_ERROR([Could not find cxx0x support in g++]) |
| fi |
| ]) |
| |