Инициализация функции указателя шаблона приводит к различным уровням ошибки косвенного обращения - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть общий указатель на функцию шаблона, принимающий аргумент типа V и возвращающий тип U (два шаблона). Я пытаюсь инициализировать его, используя функцию, принимающую аргумент типа V и возвращающую int (один шаблон), но я получаю ошибку "разные уровни косвенности" (компилятор MSVC).

Воткод:

template<typename U, typename V>
class A {
public:
    typedef U(*functype)(V);
    const static functype f; //takes type V to U
};

template<typename V>
int myfunction(V x) {
    return static_cast<int>(x+1); //takes type V to int
}

template<typename V>
const typename A<int,V>::functype A<int, V>::f=&myfunction<V>; //causes error

int main() {
    auto t= A<int,long>::f(1); //this should return 2.
    return 0;
} 

Я не уверен, что не так в назначении. typename A<int,V>::functype должно быть int(*)(V) с шаблоном V, и я назначаю другую функцию с шаблоном V. Я по-прежнему получаю сообщение об ошибке, даже если вместо этого я пишу =&myfunction в коде выше.

...