#include <iostream>
#include <type_traits>
class A // trivial
{
int dummy;
public:
void* operator new[](std::size_t size)
{
std::cout << "A::new[] size = " << size << '\n';
return ::operator new[](size);
}
};
class B // nicht trivial
{
int dummy;
public:
~B() { dummy = 0; }
void* operator new[](std::size_t size)
{
std::cout << "B::new[] size = " << size << '\n';
return ::operator new[](size);
}
};
int main()
{
using namespace std;
A* a = new A[10];
B* b = new B[10];
cout << "is_trivially_destructible<A>::value = " << is_trivially_destructible<A>::value << '\n';
cout << "is_trivially_destructible<B>::value = " << is_trivially_destructible<B>::value << '\n';
delete[] b;
delete[] a;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgpjbGFzcyBBIC8vIHRyaXZpYWwKewogICAgaW50IGR1bW15OwpwdWJsaWM6CgogICAgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qgc2l6ZSkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkE6Om5ld1tdIHNpemUgPSAiIDw8IHNpemUgPDwgJ1xuJzsKCiAgICAgICAgcmV0dXJuIDo6b3BlcmF0b3IgbmV3W10oc2l6ZSk7CiAgICB9Cn07CgpjbGFzcyBCIC8vIG5pY2h0IHRyaXZpYWwKewogICAgaW50IGR1bW15OwpwdWJsaWM6CgogICAgfkIoKSB7IGR1bW15ID0gMDsgfQoKICAgIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90IHNpemUpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJCOjpuZXdbXSBzaXplID0gIiA8PCBzaXplIDw8ICdcbic7CgogICAgICAgIHJldHVybiA6Om9wZXJhdG9yIG5ld1tdKHNpemUpOwogICAgfQp9OwoKaW50IG1haW4oKQp7Cgl1c2luZyBuYW1lc3BhY2Ugc3RkOwoJCiAgICBBKiBhID0gbmV3IEFbMTBdOwogICAgQiogYiA9IG5ldyBCWzEwXTsKCgljb3V0IDw8ICJpc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEE+Ojp2YWx1ZSA9ICIgPDwgaXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxBPjo6dmFsdWUgPDwgJ1xuJzsKCWNvdXQgPDwgImlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Qj46OnZhbHVlID0gIiA8PCBpc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEI+Ojp2YWx1ZSA8PCAnXG4nOwoJCiAgICBkZWxldGVbXSBiOwogICAgZGVsZXRlW10gYTsKCglyZXR1cm4gMDsKfQ==