Здравствуйте, collider, Вы писали:
C>Как сделать, чтобы примерно такой код компилировался?
Решения можно придумать разные, в зависимости от ситуации. Классика жанра — реализация одной шаблонной функции через серию специализаций шаблонного класса-имплеиентации.
Или SFINAE:
http://ideone.com/2dKajZ
#include <iostream>
#include <utility>
template<class T>
std::enable_if_t<std::is_fundamental<std::remove_reference_t<T>>::value> reset(T&&)
{
std::cout << 1 << std::endl;
}
template<class T>
std::enable_if_t<std::is_pointer<std::remove_reference_t<T>>::value> reset(T&&)
{
std::cout << 2 << std::endl;
}
template<class T>
std::enable_if_t<std::is_array<std::remove_reference_t<T>>::value> reset(T&&)
{
std::cout << 3 << std::endl;
}
int main()
{
int nRetCode = 0;
char mass[10];
char *pmass=mass;
reset(mass);
reset(pmass);
reset(nRetCode);
}