Здравствуйте, Went, Вы писали:
W>Здравствуйте. Нужен трейт, чтобы определял, можно ли создать создать объект на куче используя стандартный new или placement new:
W>W>auto x = new X();
W>auto x2 = new (malloc(sizeof(X))) X();
W>
Как я догадываюсь, концепты не предлагать? Тогда старый добрый SFINAE:
http://coliru.stacked-crooked.com/a/c86ada698918bdfc
#include <iostream>
#include <type_traits>
template <typename T, typename = T*>
struct is_new_available : std::false_type {};
template <typename T>
struct is_new_available<T, decltype(new T())> : std::true_type {};
struct A
{
static void* operator new(size_t) = delete;
};
int main()
{
std::cout << is_new_available<int>::value << std::endl; // -> 1
std::cout << is_new_available<A>::value << std::endl; // -> 0
}
Таким же образом проверяется и placement new.