скрыть шаблон функции, объявить специализации

Это продолжение кШаблоны C ++: предотвращение создания базового шаблона

Я использую шаблоны для достижения перегрузки функций без путаницы неявных преобразований типов:объявлять шаблон функции, определить желаемые специализации (перегрузки). все хорошо, кроме неправильного кода не выдает ошибок до фазы соединения:

lib.hpp:

template T f(T v);

lib.cpp:

#include "lib.hpp"

template long f(long v) { return -v; }
template bool f(bool v) { return !v; }

main.cpp:

#include 
#include "lib.hpp"

int main()
{
    std::cout
        < f(123L) < ", "
        < f(true) < ", "
        < f(234) < "\n"
    ;
}

Ответы на вопрос(4)

Ваш ответ на вопрос