Это минимальный пример, когда MSVC не может решить, использовать ли постоянную или неконстантную версию функции-члена:
struct A {
int b() const;
int& b();
};
template <typename T, typename Ref>
void set(A&, Ref (A::*)(), T);
int main() {
auto a = A{};
set(a, &A::b, 123);
}
Сообщение об ошибке
ошибка C2783: 'void set (A &, Ref (__cdecl A :: *) (void), T)': не удалось вывести аргумент шаблона для 'Ref'
GCC и Clang предпочитают неконстантный метод и скомпилируют его без проблем. Им потребуется Ref (A::*)() const
для выбора версии const.
Есть ли способ подтолкнуть MSVC в правильном направлении?
https://godbolt.org/z/ejT-Ls