diff --git a/m4/ax_cxx_compile_stdcxx_11.m4 b/m4/ax_cxx_compile_stdcxx_11.m4
index af37acd..40c94b6 100644
--- a/m4/ax_cxx_compile_stdcxx_11.m4
+++ b/m4/ax_cxx_compile_stdcxx_11.m4
@@ -55,79 +55,94 @@
 ])
 
 AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl
-  m4_if([$1], [], [],
-        [$1], [ext], [],
-        [$1], [noext], [],
-        [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
-  m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
-        [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
-        [$2], [optional], [ax_cxx_compile_cxx11_required=false],
-        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])dnl
-  AC_LANG_PUSH([C++])dnl
-  ac_success=no
-  AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
-  ax_cv_cxx_compile_cxx11,
-  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
-    [ax_cv_cxx_compile_cxx11=yes],
-    [ax_cv_cxx_compile_cxx11=no])])
-  if test x$ax_cv_cxx_compile_cxx11 = xyes; then
-    ac_success=yes
-  fi
-
-  m4_if([$1], [noext], [], [dnl
-  if test x$ac_success = xno; then
-    for switch in -std=gnu++11 -std=gnu++0x; do
-      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
-      AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
-                     $cachevar,
-        [ac_save_CXXFLAGS="$CXXFLAGS"
-         CXXFLAGS="$CXXFLAGS $switch"
-         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
-          [eval $cachevar=yes],
-          [eval $cachevar=no])
-         CXXFLAGS="$ac_save_CXXFLAGS"])
-      if eval test x\$$cachevar = xyes; then
-        CXXFLAGS="$CXXFLAGS $switch"
-        ac_success=yes
-        break
-      fi
-    done
-  fi])
-
-  m4_if([$1], [ext], [], [dnl
-  if test x$ac_success = xno; then
-    for switch in -std=c++11 -std=c++0x; do
-      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
-      AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
-                     $cachevar,
-        [ac_save_CXXFLAGS="$CXXFLAGS"
-         CXXFLAGS="$CXXFLAGS $switch"
-         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
-          [eval $cachevar=yes],
-          [eval $cachevar=no])
-         CXXFLAGS="$ac_save_CXXFLAGS"])
-      if eval test x\$$cachevar = xyes; then
-        CXXFLAGS="$CXXFLAGS $switch"
-        ac_success=yes
-        break
-      fi
-    done
-  fi])
-  AC_LANG_POP([C++])
-  if test x$ax_cxx_compile_cxx11_required = xtrue; then
-    if test x$ac_success = xno; then
-      AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
+  AC_ARG_WITH([c++11],
+    AS_HELP_STRING(
+        [--with-c++11=@<:@ARG@:>@],
+        [use C++11 when available @<:@default=yes@:>@]
+    ),
+    [
+    if test "$withval" = "no"; then
+        WANT_CXX11="no"
     fi
-  else
+    ],
+    [WANT_CXX11="yes"]
+  )
+
+  if test "x$WANT_CXX11" = "xyes"; then
+    m4_if([$1], [], [],
+          [$1], [ext], [],
+          [$1], [noext], [],
+          [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
+    m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
+          [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
+          [$2], [optional], [ax_cxx_compile_cxx11_required=false],
+          [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])dnl
+    AC_LANG_PUSH([C++])dnl
+    ac_success=no
+    AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
+    ax_cv_cxx_compile_cxx11,
+    [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
+      [ax_cv_cxx_compile_cxx11=yes],
+      [ax_cv_cxx_compile_cxx11=no])])
+    if test x$ax_cv_cxx_compile_cxx11 = xyes; then
+      ac_success=yes
+    fi
+    
+    m4_if([$1], [noext], [], [dnl
     if test x$ac_success = xno; then
-      HAVE_CXX11=0
-      AC_MSG_NOTICE([No compiler with C++11 support was found])
+      for switch in -std=gnu++11 -std=gnu++0x; do
+        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
+        AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
+                       $cachevar,
+          [ac_save_CXXFLAGS="$CXXFLAGS"
+           CXXFLAGS="$CXXFLAGS $switch"
+           AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
+            [eval $cachevar=yes],
+            [eval $cachevar=no])
+           CXXFLAGS="$ac_save_CXXFLAGS"])
+        if eval test x\$$cachevar = xyes; then
+          CXXFLAGS="$CXXFLAGS $switch"
+          ac_success=yes
+          break
+        fi
+      done
+    fi])
+    
+    m4_if([$1], [ext], [], [dnl
+    if test x$ac_success = xno; then
+      for switch in -std=c++11 -std=c++0x; do
+        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
+        AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
+                       $cachevar,
+          [ac_save_CXXFLAGS="$CXXFLAGS"
+           CXXFLAGS="$CXXFLAGS $switch"
+           AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
+            [eval $cachevar=yes],
+            [eval $cachevar=no])
+           CXXFLAGS="$ac_save_CXXFLAGS"])
+        if eval test x\$$cachevar = xyes; then
+          CXXFLAGS="$CXXFLAGS $switch"
+          ac_success=yes
+          break
+        fi
+      done
+    fi])
+    AC_LANG_POP([C++])
+    if test x$ax_cxx_compile_cxx11_required = xtrue; then
+      if test x$ac_success = xno; then
+        AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
+      fi
     else
-      HAVE_CXX11=1
-      AC_DEFINE(HAVE_CXX11,1,
-                [define if the compiler supports basic C++11 syntax])
+      if test x$ac_success = xno; then
+        HAVE_CXX11=0
+        AC_MSG_NOTICE([No compiler with C++11 support was found])
+      else
+        HAVE_CXX11=1
+        AC_DEFINE(HAVE_CXX11,1,
+                  [define if the compiler supports basic C++11 syntax])
+      fi
+    
+      AC_SUBST(HAVE_CXX11)
     fi
-
-    AC_SUBST(HAVE_CXX11)
   fi
 ])
