[buddy] Enable C++11 and add a move constructor/assignment operator.
* configure.ac: Enable C++11 mode. * src/bdd.h: Use noexport, and add a move constructor and move assignment operator. The move version of these method do not have to increment the reference counter, saving time. On a small test run, this change saved 24% of the calls to bdd_addref_nc().
This commit is contained in:
parent
b37dc0bc90
commit
bd6d88db96
3 changed files with 91 additions and 16 deletions
|
|
@ -43,6 +43,41 @@ if test x$enable_warnings = xyes; then
|
|||
CF_GCC_WARNINGS
|
||||
fi
|
||||
|
||||
# Turn on C++11 support
|
||||
AC_LANG(C++)
|
||||
m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody],
|
||||
[AC_LANG_SOURCE([#include <memory>
|
||||
#include <string>
|
||||
|
||||
template <typename T>
|
||||
struct check
|
||||
{
|
||||
static_assert(sizeof(int) <= sizeof(T), "not big enough");
|
||||
};
|
||||
|
||||
typedef check<check<bool>> right_angle_brackets;
|
||||
|
||||
auto f = std::make_shared<std::string>("shared_ptr");
|
||||
|
||||
int a;
|
||||
decltype(a) b;
|
||||
|
||||
typedef check<int> check_type;
|
||||
check_type c;
|
||||
check_type&& cr = static_cast<check_type&&>(c);
|
||||
|
||||
auto d = a;
|
||||
])])
|
||||
|
||||
for f in -std=c++11 '-std=c++11 -stdlib=libc++' -std=c++0x
|
||||
do
|
||||
AX_CHECK_COMPILE_FLAG([$f], [CXXFLAGS="$CXXFLAGS $f" stdpass=true], [], [],
|
||||
[_AX_CXX_COMPILE_STDCXX_11_testbody])
|
||||
${stdpass-false} && break
|
||||
done
|
||||
if ! "${stdpass-false}"; then
|
||||
AC_ERROR([unable to turn on C++11 mode with this compiler])
|
||||
fi
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue