I'm trying to figure out if there is any benefit of creating a class template where a buffer can be statically allocated, useful for small buffers located on the stack and dynamically allocated buffers.

I want to combine these

Code:
template<int tsize>
class MyStaticClass
{
	char buffer[tsize];
public:
	void Method1();
	void Method2();
};

Code:
class MyDynamicClass
{
	char *buffer;
public:
	void Method1();
	void Method2();
};
If we can default the size template<int tsize = 0> so that default is zero which means that the class should be dynamically allocated.

Code:
template<int tsize = 0>
class MyClass
{
	char buffer[tsize];
public:
	void Method1();
	void Method2();
};

template<>
class MyClass<0>
{
	char *buffer;
public:
	void Method1();
	void Method2();
};
Now if the template parameter is zero the buffer variable will be a pointer instead of a vector.

My question is the compiler will insert methods for every size of the tsize or is it smart enough to make it general so that for any tsize > 0 will be generic?

Also when using dynamically allocated MyClass you still have to have brackets, MyClass<>. Is there a way to make the class so that the brackets aren't needed when it is a dynamic allocated class?

Should I separate the dynamic case and the static case? Is it better to have a separate class for the dynamic allocated case and static case?

The reason for the merge is that I want to more generic classes so that both cases originates for the same base class but maybe I'm going to far in this case.