C++ шаблоны — можно ли генерировать разный код в зависимости от размера передаваемого типа?
Как-то так:#include <iostream>
#include <type_traits>
#include <typeinfo>

template <typename T>
class GenericQueueBase
{
	//Общий интерфейс очереди (для рантайм полиморфизма)
};

template <typename T>
class Queue_pass : public GenericQueueBase<T>
{
    static_assert(sizeof(T) <= 4, "types up to 4 bytes are allowed");
    //Реализация очереди
};

template <typename T>
class Pool_pass : public GenericQueueBase<T>
{
    //Реализация пула
};


template<typename T>
using GenericQueue = typename std::conditional<sizeof(T) <= 4, Queue_pass<T>, Pool_pass<T>>::type;

int main()
{
	std::cout << typeid(GenericQueue<int>).name() << '\n' << typeid(GenericQueue<double>).name();
}
Не стоит привязываться к размеру, стоит привязываться к типу.
Но и к размеру тоже можно, если преобразовать размер в тип:
template< int SZ >
struct SizeType
{
    enum { TypeSize = SZ };
};
SizeType и SizeType - разные типы.