summaryrefslogtreecommitdiffstats
path: root/m4macros/ax_cpp11.m4
diff options
context:
space:
mode:
authorTomek Mrugalski <tomasz@isc.org>2017-04-14 19:24:52 +0200
committerTomek Mrugalski <tomasz@isc.org>2017-04-20 19:44:15 +0200
commitfd3b6a3d7e44c1c25bf2285e89d3aab83c6d690a (patch)
treed162739fb30c443ac53b29e9432f4907b98f40e1 /m4macros/ax_cpp11.m4
parent[master] Added ChangeLog entry for #5217. (diff)
downloadkea-fd3b6a3d7e44c1c25bf2285e89d3aab83c6d690a.tar.xz
kea-fd3b6a3d7e44c1c25bf2285e89d3aab83c6d690a.zip
[5208] C++11 detection code moved to ax_cpp11.m4
Diffstat (limited to 'm4macros/ax_cpp11.m4')
-rw-r--r--m4macros/ax_cpp11.m4122
1 files changed, 122 insertions, 0 deletions
diff --git a/m4macros/ax_cpp11.m4 b/m4macros/ax_cpp11.m4
new file mode 100644
index 0000000000..cf6b2ba6d6
--- /dev/null
+++ b/m4macros/ax_cpp11.m4
@@ -0,0 +1,122 @@
+AC_DEFUN([AX_ISC_CPP11], [
+
+CXX_SAVED=$CXX
+feature=
+for retry in "none" "--std=c++11" "--std=c++0x" "--std=c++1x" "fail"; do
+ if test "$retry" = "fail"; then
+ AC_MSG_ERROR([$feature (a C++11 feature) is not supported])
+ fi
+ if test "$retry" != "none"; then
+ AC_MSG_WARN([unsupported C++11 feature])
+ AC_MSG_NOTICE([retrying by adding $retry to $CXX])
+ CXX="$CXX_SAVED $retry"
+ AC_MSG_CHECKING($retry support)
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [],
+ [int myincr = 1;])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ continue])
+ fi
+
+ AC_MSG_CHECKING(std::unique_ptr support)
+ feature="std::unique_ptr"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#include <memory>],
+ [std::unique_ptr<int> a;])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ continue])
+
+ AC_MSG_CHECKING(cbegin/cend support)
+ feature="cbegin/cend"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#include <string>],
+ [const std::string& s = "abcd";
+ unsigned count = 0;
+ for (std::string::const_iterator i = s.cbegin();
+ i != s.cend(); ++i)
+ if (*i == 'b')
+ ++count;])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ continue])
+
+ AC_MSG_CHECKING(final method support)
+ feature="final method"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [class Foo {
+ public:
+ virtual ~Foo() {};
+ virtual void bar() final;
+ };],[])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ continue])
+
+ AC_MSG_CHECKING(aggregate initialization support)
+ feature="aggregate initialization"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#include <vector>],
+ [std::vector<int> foo = { 1, 2, 3};])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ continue])
+
+ AC_MSG_CHECKING(variadic template support)
+ feature="variadic template"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [template<typename ... Args>
+ struct A {
+ void foo(Args... myargs) { return; };
+ };],
+ [A<> a;
+ a.foo();])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ continue])
+
+ AC_MSG_CHECKING(static_assert support)
+ feature="static_assert"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [static_assert(1 + 1 == 2, "");],
+ [])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ continue])
+
+ AC_MSG_CHECKING(template alias)
+ feature="template alias"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [template<int i>
+ class I {
+ public: int get() { return i; };
+ };
+ using Zero = I<0>;],
+ [Zero Z;
+ return Z.get();])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])
+ continue])
+
+ AC_MSG_CHECKING(lambda support)
+ feature="lambda"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [],
+ [auto myincr = [[]](int x) { return x + 1; };])],
+ [AC_MSG_RESULT([yes])
+ break],
+ [AC_MSG_RESULT([no])
+ continue])
+done
+
+])dnl AX_ISC_RPATH