在一些编译器中,支持sizeof()返回0,所以,会用到是否为合法类型,否则会导致中断触发
#include <iostream>
using namespace std;
template<typename T>
inline void checked_delete(T* x) noexcept
{
typedef char type_must_be_complete[sizeof(T) ? 1 : -1];
(void) sizeof(type_must_be_complete);
delete x;
}
template<typename T>
inline void checked_array_delete(T* x) noexcept
{
typedef char type_must_be_complete[sizeof(T) ? 1 : -1];
(void) sizeof(type_must_be_complete);
delete []x;
}
template<typename T>
struct checked_deleter
{
typedef void result_type;
typedef T* argument_type;
void operator()(T* x) const noexcept
{
checked_delete<T>(x);
}
};
template <typename T>
struct checked_array_deleter
{
typedef void result_type;
typedef T* argument_type;
void operator()(T* x) const noexcept
{
checked_array_delete<T>(x);
}
};
class emptyClass
{
};
struct emptyStruct
{