blob: 2436f5ebcc4f99a7d5b2b3fe1c44f19c1ad2256a [file] [log] [blame]
/*
(c) 2014 Glen Joseph Fernandes
glenjofe at gmail dot com
Distributed under the Boost Software
License, Version 1.0.
http://boost.org/LICENSE_1_0.txt
*/
#include <boost/align/aligned_alloc.hpp>
#include <boost/align/aligned_delete.hpp>
#include <boost/align/alignment_of.hpp>
#include <boost/core/lightweight_test.hpp>
#include <new>
#include <cstddef>
template<class T>
class type {
public:
static int count;
type()
: value() {
count++;
}
~type() {
count--;
}
private:
T value;
};
template<class T>
int type<T>::count = 0;
template<class T>
T* aligned_new()
{
void* p = boost::alignment::aligned_alloc(boost::
alignment::alignment_of<T>::value, sizeof(T));
if (p) {
return ::new(p) T();
} else {
throw std::bad_alloc();
}
}
template<class T>
void test()
{
type<T>* p = aligned_new<type<T> >();
BOOST_TEST(type<T>::count == 1);
boost::alignment::aligned_delete()(p);
BOOST_TEST(type<T>::count == 0);
}
class C { };
int main()
{
test<char>();
test<bool>();
test<short>();
test<int>();
test<long>();
test<float>();
test<double>();
test<long double>();
test<void*>();
test<void(*)()>();
test<C>();
test<int C::*>();
test<int (C::*)()>();
return boost::report_errors();
}