1# ============================================================================
2#  http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_0x.html
3# ============================================================================
4#
5# SYNOPSIS
6#
7#   AX_CXX_COMPILE_STDCXX_0X
8#
9# DESCRIPTION
10#
11#   Check for baseline language coverage in the compiler for the C++0x
12#   standard.
13#
14# LICENSE
15#
16#   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
17#
18#   Copying and distribution of this file, with or without modification, are
19#   permitted in any medium without royalty provided the copyright notice
20#   and this notice are preserved. This file is offered as-is, without any
21#   warranty.
22
23#serial 7 (+1)
24
25AU_ALIAS([AC_CXX_COMPILE_STDCXX_0X], [AX_CXX_COMPILE_STDCXX_0X])
26AC_DEFUN([AX_CXX_COMPILE_STDCXX_0X], [
27  AC_CACHE_CHECK(if g++ supports C++0x features without additional flags,
28  ax_cv_cxx_compile_cxx0x_native,
29  [AC_LANG_SAVE
30  AC_LANG_CPLUSPLUS
31  AC_TRY_COMPILE([
32  template <typename T>
33    struct check
34    {
35      static_assert(sizeof(int) <= sizeof(T), "not big enough");
36    };
37
38    typedef check<check<bool>> right_angle_brackets;
39
40    int a;
41    decltype(a) b;
42
43    typedef check<int> check_type;
44    check_type c;
45    check_type&& cr = static_cast<check_type&&>(c);],,
46  ax_cv_cxx_compile_cxx0x_native=yes, ax_cv_cxx_compile_cxx0x_native=no)
47  AC_LANG_RESTORE
48  ])
49
50  AC_CACHE_CHECK(if g++ supports C++0x features with -std=c++0x,
51  ax_cv_cxx_compile_cxx0x_cxx,
52  [AC_LANG_SAVE
53  AC_LANG_CPLUSPLUS
54  ac_save_CXXFLAGS="$CXXFLAGS"
55  CXXFLAGS="$CXXFLAGS -std=c++0x"
56  AC_TRY_COMPILE([
57  template <typename T>
58    struct check
59    {
60      static_assert(sizeof(int) <= sizeof(T), "not big enough");
61    };
62
63    typedef check<check<bool>> right_angle_brackets;
64
65    int a;
66    decltype(a) b;
67
68    typedef check<int> check_type;
69    check_type c;
70    check_type&& cr = static_cast<check_type&&>(c);],,
71  ax_cv_cxx_compile_cxx0x_cxx=yes, ax_cv_cxx_compile_cxx0x_cxx=no)
72  CXXFLAGS="$ac_save_CXXFLAGS"
73  AC_LANG_RESTORE
74  ])
75
76  AC_CACHE_CHECK(if g++ supports C++0x features with -std=gnu++0x,
77  ax_cv_cxx_compile_cxx0x_gxx,
78  [AC_LANG_SAVE
79  AC_LANG_CPLUSPLUS
80  ac_save_CXXFLAGS="$CXXFLAGS"
81  CXXFLAGS="$CXXFLAGS -std=gnu++0x"
82  AC_TRY_COMPILE([
83  template <typename T>
84    struct check
85    {
86      static_assert(sizeof(int) <= sizeof(T), "not big enough");
87    };
88
89    typedef check<check<bool>> right_angle_brackets;
90
91    int a;
92    decltype(a) b;
93
94    typedef check<int> check_type;
95    check_type c;
96    check_type&& cr = static_cast<check_type&&>(c);],,
97  ax_cv_cxx_compile_cxx0x_gxx=yes, ax_cv_cxx_compile_cxx0x_gxx=no)
98  CXXFLAGS="$ac_save_CXXFLAGS"
99  AC_LANG_RESTORE
100  ])
101
102  if test "$ax_cv_cxx_compile_cxx0x_cxx" = yes; then
103    AC_DEFINE(HAVE_STDCXX_0X,, [Define if compiler supports C++0x features.])
104    CXXFLAGS="$CXXFLAGS -std=c++0x"
105  fi
106])
107