Если вы хотите сделать ТОЛЬКО специализации, то:
Сначала создайте основное определение шаблона:
template<typename T>
T recv();
Затем создайте только специализации:
template<>
char recv<char>() {return '\0';}
// likewise, but for int
template<>
int recv<int>() {return 0;}
Если кто-то использует шаблоны с отсутствующей специализацией, то компоновщик покажет сообщение об ошибке с отсутствующими функциями.
Поэтому Вам необходимо удалить либо конкретные специализации:
template<>
float recv<float>() = delete;
иливсе другие специализации, но тогда это определение должно заменить основное определение:
template<typename T>
T recv() = delete;