не может преобразовать параметр 1 из ‘VP & lt; T & gt;’ на «VP & T» & gt; & Амп;» еще одна ошибка VS

Следующий код не имеет проблем в gcc. в VS 2010 Express это не дает

------ Build started: Project: helium, Configuration: Debug Win32 ------
testvs.cpp
..\..\helium\src\legacy\testvs.cpp(21): error C2664: 'ulink' : cannot convert parameter 1 from 'VP<T>' to 'VP<T> &'
with
[
T=F
]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

В ней то же самое для любой визуальной студийной версии или это проблема, ограниченная 2010?
Проблема исчезнет, ​​если удалить второе определение оператора ()

template<typename T> struct S{
void operator()(T&){}
void operator()(){}
};template <typename T,typename G=typename T::GP,void (S<T>::*f)(T&) =&S<T>::operator() > struct VP{
void fa(){}
};template<typename T> void ulink( VP<T >& v){}struct F{
typedef int GP;
};

void f(){

VP<F> vps;
ulink(vps);
}

2

Решение

Спасибо Сету Карнеги за подтверждение, что это еще одна нерешенная ошибка VS.

Возможные обходные пути

1) включить в другую структуру

template<typename L> struct Con{
L& l;
Con(L& pl):l(pl){}
};

template<typename T> void ulink(const Con<VP<T > >& v){
v.l.fa();
}

2) сохранить шаблон более общим

template<typename T> void gulink(T& v){
v.fa();
}
3

Другие решения

Других решений пока нет …