У меня проблема с шаблонами функций с помощью компилятора 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
в первой перегруженной функции, программа будет скомпилирована правильно.
Можете ли вы предложить мне, как с этим справиться, пожалуйста?