Предположим есть реализация шаблона проектирования object pool.
template<typename T, size_t count>
class ObjectPoll {
public:
/*...*/
private:
size_t m_count = count;
/*...*/
}
Хочется получить ошибку на этапе компиляции, если пользователь пытается создать объект ObjectPool<Bullet, 0> bulletsPool;
Возможно ли сделать это при помощи std::enable_if<>?
Например:
template<typename T, size_t count, typename = std::enable_if<count != 0>::value>
class ObjectPoll {/*...*/};
Или лучше сделать это при помощи static_assert?
Да, можно. Только раз уж вы основываете это на типовом параметре, то почему из enable_if<> вы вдруг берете enable_if<>::value, а не enable_if<>::type?
Правильно
template<typename T, size_t count, typename = typename std::enable_if<count != 0>::type>
Однако static_assert для этой цели действительно выглядит намного уместнее.
Продвижение своими сайтами как стратегия роста и независимости