Skip to content
Snippets Groups Projects
Commit fd51c897 authored by Christian Engwer's avatar Christian Engwer
Browse files

* check for static_assert during configure

* enable -std=c++0x switch if g++ supports it
* honour HAVE_STATIC_ASSERT in static_assert.hh
* add xfail_test for dune_static_assert

[[Imported from SVN: r5272]]
parent 244b8121
Branches
Tags
No related merge requests found
......@@ -42,9 +42,7 @@ struct IsTrue<true>
static void yes() DUNE_DEPRECATED {};
};
#include <iostream>
#if not HAVE_STATIC_ASSERT
// Taken from BOOST
//
// Helper macro CPPMAGIC_JOIN:
......@@ -63,6 +61,7 @@ template <bool x> struct static_assert_failure;
template <> struct static_assert_failure<true> { };
template<int x> struct static_assert_test {};
#endif
/**
\brief Helper template so that compilation fails if condition is not true.
......@@ -93,10 +92,16 @@ template<int x> struct static_assert_test {};
</ol>
*/
#if HAVE_STATIC_ASSERT
#define dune_static_assert(COND,MSG) \
static_assert(COND,MSG)
#else
#define dune_static_assert(COND,MSG) \
typedef static_assert_test<\
typedef static_assert_test< \
sizeof(static_assert_failure< (bool)( COND )>)\
> CPPMAGIC_JOIN (dune_static_assert_typedef_, __LINE__)
#endif
/* @} */
......
......@@ -11,12 +11,12 @@ TESTPROGS = parsetest test-stack arraylisttest smartpointertest \
testfassign_fail1 testfassign_fail2 testfassign_fail3\
testfassign_fail4 testfassign_fail5 testfassign_fail6
# which tests to run
TESTS = $(TESTPROGS)
TESTS = $(TESTPROGS) static_assert_test_run
XFAIL_TESTS = testfassign_fail1 testfassign_fail2 testfassign_fail3\
testfassign_fail4 testfassign_fail5 testfassign_fail6
testfassign_fail4 testfassign_fail5 testfassign_fail6\
static_assert_test_run
# programs just to build when "make check" is used
check_PROGRAMS = $(TESTPROGS)
......
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
#include <config.h>
#include <dune/common/static_assert.hh>
int main()
{
dune_static_assert(true, "OK");
dune_static_assert(false, "FAIL");
return 0;
}
#!/bin/bash
make static_assert_test.o
AC_DEFUN([DUNE_COMMON_CHECKS],
[
AC_REQUIRE([AC_PROG_CPP])
AC_REQUIRE([AC_PROG_CXXCPP])
AC_REQUIRE([AC_PROG_INSTALL])
AC_REQUIRE([AC_PROG_LN_S])
AC_REQUIRE([AC_PROG_MAKE_SET])
AC_REQUIRE([AC_PROG_RANLIB])
AC_REQUIRE([AC_PROG_LIBTOOL])
AC_REQUIRE([DUNE_CHECK_COMPILER])
AC_REQUIRE([GXX0X])
AC_REQUIRE([STATIC_ASSERT_CHECK])
AC_REQUIRE([DUNE_LINKCXX])
AC_REQUIRE([DUNE_CHECKDEPRECATED])
AC_REQUIRE([DUNE_SET_MINIMAL_DEBUG_LEVEL])
......@@ -22,13 +32,6 @@ AC_DEFUN([DUNE_COMMON_CHECKS],
test "$GXX" = yes; then
CXXFLAGS="$CXXFLAGS -Wall"
fi
AC_REQUIRE([AC_PROG_CPP])
AC_REQUIRE([AC_PROG_CXXCPP])
AC_REQUIRE([AC_PROG_INSTALL])
AC_REQUIRE([AC_PROG_LN_S])
AC_REQUIRE([AC_PROG_MAKE_SET])
AC_REQUIRE([AC_PROG_RANLIB])
AC_REQUIRE([AC_PROG_LIBTOOL])
dnl checks for header files.
AC_REQUIRE([AC_HEADER_STDC])
......
AC_DEFUN([GXX0X],[
AC_REQUIRE([AC_PROG_CXX])
AC_LANG_PUSH([C++])
if test "x$GXX" = xyes; then
AC_MSG_CHECKING([whether g++ accepts -std=c++0x])
ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -std=c++0x"
AC_TRY_COMPILE([],[],[
AC_MSG_RESULT(yes)], [
CXXFLAGS="$ac_save_CXXFLAGS"
AC_MSG_RESULT(no)])
fi
AC_LANG_POP
])
AC_DEFUN([STATIC_ASSERT_CHECK],[
AC_LANG_PUSH([C++])
AC_MSG_CHECKING([whether static_assert is supported])
AC_TRY_COMPILE([],[static_assert(true,"MSG")], [
HAVE_STATIC_ASSERT=0,
AC_MSG_RESULT(yes)], [
HAVE_STATIC_ASSERT=1,
AC_MSG_RESULT(no)])
if test x$HAVE_STATIC_ASSERT = x1; then
AC_DEFINE(HAVE_STATIC_ASSERT, 1, [Define to 1 if static_assert is supported])
fi
AC_LANG_POP
])
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment