Здравствуйте. Нужен трейт, чтобы определял, можно ли создать создать объект на куче используя стандартный new или placement new:
auto x = new X();
auto x2 = new (malloc(sizeof(X))) X();
По идее, ограничения два — должен быть публичный конструктор по умолчанию (или с аргументами по умолчанию..., но это не важно), и оператор new не должен быть каким-то образом запрещён.
Поэтому, стандартный std::is_default_constructible не подходит (он, я так понимаю, проверяет возможность создания на стеке и поэтому учитывает доступность деструктора).
Есть какой-то прямой и очевидный способ проверить это, а то велоипеды работают плохо и не везде