Browse Source

Use C++11 alignof(type) if available

coverity_scan
Daniel Scharrer 13 years ago
parent
commit
1de0483405
  1. 3
      CMakeLists.txt
  2. 3
      cmake/check-cxx11-alignof.cpp
  3. 1
      src/configure.hpp.in
  4. 6
      src/util/types.hpp

3
CMakeLists.txt

@ -147,10 +147,11 @@ if(${Boost_VERSION} LESS 104800)
# Older Boost versions don't work with C++11
elseif(USE_CXX11)
enable_cxx11()
check_cxx11("std::unique_ptr" INNOEXTRACT_HAVE_STD_UNIQUE_PTR)
check_cxx11("alignof" INNOEXTRACT_HAVE_ALIGNOF)
if(WIN32)
check_cxx11("std::codecvt_utf8_utf16" INNOEXTRACT_HAVE_STD_CODECVT_UTF8_UTF16)
endif()
check_cxx11("std::unique_ptr" INNOEXTRACT_HAVE_STD_UNIQUE_PTR)
endif()
# Don't expose internal symbols to the outside world by default

3
cmake/check-cxx11-alignof.cpp

@ -0,0 +1,3 @@
int main() {
return alignof(int) != 1;
}

1
src/configure.hpp.in

@ -26,6 +26,7 @@
#cmakedefine01 INNOEXTRACT_HAVE_BSWAP_64
// C++11 functionality
#cmakedefine01 INNOEXTRACT_HAVE_ALIGNOF
#cmakedefine01 INNOEXTRACT_HAVE_STD_CODECVT_UTF8_UTF16
#cmakedefine01 INNOEXTRACT_HAVE_STD_UNIQUE_PTR

6
src/util/types.hpp

@ -32,6 +32,8 @@
#include "util/util.hpp"
#include "configure.hpp"
namespace util {
#if BOOST_VERSION < 104200
@ -91,7 +93,9 @@ struct compatible_integer<Base, Bits, true> {
//! Get the alignment of a type.
template <class T>
unsigned int alignment_of() {
#if defined(_MSC_VER) && _MSC_VER >= 1300
#if INNOEXTRACT_HAVE_ALIGNOF
return alignof(T);
#elif defined(_MSC_VER) && _MSC_VER >= 1300
return __alignof(T);
#elif defined(__GNUC__)
return __alignof__(T);

Loading…
Cancel
Save