Если вы используете GCC (выглядит как вы), то из libstdc++ manual они есть примеры AUTOCONF для проверки C++ функций базового языка:
# AC_COMPILE_STDCXX_OX
AC_DEFUN([AC_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 = 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 = 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 = 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. ])
fi
])
Вы могли бы попытаться поставить лямбда там, если вам разыскивается. Затем с помощью HAVE_STDCXX_0X в руке вы можете установить --std = C++ 0x соответствующим образом.
Какой у вас компилятор? Если для GCC вам требуется 4.6 или более поздняя версия для lambdas, то это должен быть случай модификации make-файла, чтобы добавить флаг для размещения компилятора в режиме C++ 0X, либо --std = C++ 0x или -std = gnu ++ 0x в зависимости от того, нужен ли вам диалект GNU C++ 0x. – mark
Возможный дубликат [Как использовать возможности C++ 11 с Autoconf?] (Http://stackoverflow.com/questions/7987952/how-to-use-c11-features-with-autoconf) – Flexo
@awoodland, я попробовал ваше предложение из другой темы. Я получаю следующую ошибку: «./configure: строка 2962: синтаксическая ошибка рядом с неожиданным токеном' -std = C++ 0x, », после чего выделенная ошибочная строка выглядит следующим образом: AX_CHECK_COMPILE_FLAG (-std = C++ 0x, CXXFLAGS = "$ CXXFLAGS -std = C++ 0x"). В строке перед этим указывается «проверка стиля зависимостей g ++ ... gcc3». Я думаю, что это проблема. Но у меня установлен GCC 4.6.2, и это версия GCC по умолчанию. (Запуск gcc -v возвращает версию 4.6.2.) – Shredderroy