#include template struct foobar : std::false_type {}; // Template général. template T fun(T a) { // La variable value n'est évaluée que si la méthode est utilisée. static_assert(foobar::value, "this function has to be implemented for desired type"); } template <> int fun(int a) { return a; } int main() { // fun('a'); // Echec fun(10); // fun(10.14); // Echec }