Вы должны закончить строку символом \ 0. Вот почему они называются нулевыми завершенными строками.
Также целесообразно выделить 1 дополнительный символ для хранения \ 0.
У тебя это почти есть. Когда вы специализируете шаблон, и это не частичная специализация, вы не включаете никаких параметров шаблона. Это сделало бы код похожим на
template <int dim, int spacedim>
class FE_problem
{
public:
void generate_mesh();
};
template <> // full specialization, leave template parameter blank as they are provided below
void FE_problem<1, 3>::generate_mesh()
// ^^^^ specify the specialized types/values here
{
std::cout << "void FE_problem<1, 3>::generate_mesh()\n";
}
template <> // full specialization, leave template parameter blank as they are provided below
void FE_problem<3, 3>::generate_mesh()
// ^^^^ specify the specialized types/values here
{
std::cout << "void FE_problem<3, 3>::generate_mesh()\n";
}
int main()
{
FE_problem<1, 3>{}.generate_mesh();
FE_problem<3, 3>{}.generate_mesh();
}
, который выводит
void FE_problem<1, 3>::generate_mesh()
void FE_problem<3, 3>::generate_mesh()