У меня проблема с шаблонами функций с помощью компилятора vs14. Таким образом, следующий код демонстрирует проблему.
#include <iostream>
using namespace std;
class Class {
public:
int memberFoo() {
return 0;
}
};
template <class VariableT, class C>
void nothing(const VariableT C::*memberV) {
cout << "Pointer to member variable";
}
template <class R, class C>
void nothing(R (C::*memberF)()) {
cout << "Pointer to member function";
}
int main() {
nothing(&Class::memberFoo);
return 0;
}
Компилятор позволяет мне знать, что функция nothing неоднозначна. Когда я вижу результат, у него, похоже, другое поведение, чем я ожидал.
В первой функции nothing компилятор выводит VariableT как int(void). На самом деле это не так странно, но я полагал, что второй будет более подходящим и будет соответствовать. Что более интересно, если вы удалите const в первой перегруженной функции, программа будет скомпилирована правильно.
Можете ли вы предложить мне, как с этим справиться, пожалуйста?