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

implement extended make_shared test to fix problems with std::tr1

[[Imported from SVN: r6354]]
parent abc42ffc
No related branches found
No related tags found
No related merge requests found
......@@ -305,7 +305,7 @@ namespace Dune
// C++0x and Boost have a make_shared implementation, TR1 does not.
// Unfortunately, TR1 gets picked over Boost if present.
// Moreover, boost::make_shared() only exists for (remotely) recent versions of Boost.
#if HAVE_MEMORY || (HAVE_BOOST_SHARED_PTR_HPP && HAVE_BOOST_MAKE_SHARED_HPP && !HAVE_TR1_MEMORY)
#if HAVE_MAKE_SHARED
using SHARED_PTR_NAMESPACE :: make_shared;
#else
......
......@@ -22,7 +22,7 @@ AC_DEFUN([DUNE_COMMON_CHECKS],
AC_REQUIRE([STATIC_ASSERT_CHECK])
AC_REQUIRE([NULLPTR_CHECK])
AC_REQUIRE([SHARED_PTR])
AC_REQUIRE([BOOST_MAKE_SHARED_HPP])
AC_REQUIRE([MAKE_SHARED])
AC_REQUIRE([DUNE_LINKCXX])
AC_REQUIRE([DUNE_CHECKDEPRECATED])
AC_REQUIRE([DUNE_SET_MINIMAL_DEBUG_LEVEL])
......
AC_DEFUN([BOOST_MAKE_SHARED_HPP],[
AC_REQUIRE([AC_PROG_CXX])
AC_DEFUN([MAKE_SHARED],[
AC_REQUIRE([SHARED_PTR])
AS_IF([test "$SHARED_PTR_NAMESPACE" = "boost"],[
AC_CHECK_HEADER([boost/make_shared.hpp],
[AC_DEFINE([HAVE_BOOST_MAKE_SHARED_HPP], [1],
[Define to 1 if you have <boost/make_shared.hpp>.])])])
AC_MSG_CHECKING([whether SHARED_PTR_NAMESPACE ($SHARED_PTR_NAMESPACE) provides make_shared])
AC_LANG_PUSH([C++])
AC_CHECK_HEADER([boost/make_shared.hpp],
[AC_DEFINE([HAVE_BOOST_MAKE_SHARED_HPP], [1],
[Define to 1 if you have <boost/make_shared.hpp>.])])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[
#if defined(HAVE_MEMORY)
# include <memory>
#endif
#if defined(HAVE_TR1_MEMORY)
# include <tr1/memory>
#endif
#if defined(HAVE_BOOST_SHARED_PTR_HPP) && defined(HAVE_BOOST_MAKE_SHARED_HPP)
# include <boost/shared_ptr.hpp>
# include <boost/make_shared.hpp>
#endif
#include <string>
]],[[
$SHARED_PTR_NAMESPACE::make_shared<int>(3);
]])],
[ AC_MSG_RESULT(yes)
have_make_shared=yes
],[AC_MSG_RESULT(no)
have_make_shared=no
])
AS_IF([test "$have_make_shared" = "yes"],[
AC_DEFINE([HAVE_MAKE_SHARED], [1],
[Define to 1 if SHARED_PTR_NAMESPACE::make_shared is usable.])])
AC_LANG_POP
])
......@@ -54,6 +54,7 @@ shared_ptr<string> test_ptr(new string("test string"));
])
AS_IF([ test "x$ac_cv_shared_ptr_namespace" = xmissing ],
[], [
SHARED_PTR_NAMESPACE=${ac_cv_shared_ptr_namespace}
AC_DEFINE_UNQUOTED([SHARED_PTR_NAMESPACE],
${ac_cv_shared_ptr_namespace},
[The namespace in which SHARED_PTR can be found])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment