gpt4 book ai didi

c++ - MSVC : inference of pointer to member function with const and non-const overloads

转载 作者:行者123 更新时间:2023-11-30 01:34:40 25 4
gpt4 key购买 nike

这是一个最小的示例,其中 MSVC 无法决定是使用成员函数的 const 版本还是非 const 版本:

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);
}

错误信息是

error C2783: 'void set(A &,Ref (__cdecl A::* )(void),T)': could not deduce template argument for 'Ref'

GCC 和 Clang 更喜欢非常量方法,并且可以毫无问题地编译它。他们需要 Ref (A::*)() const 来选择 const 版本。

有什么方法可以将 MSVC 推向正确的方向吗?

https://godbolt.org/z/ejT-Ls

最佳答案

您可以通过强制转换函数指针来强制选择非常量版本:

set(a, static_cast<int & (A::*)()>(&A::b), 123);

关于c++ - MSVC : inference of pointer to member function with const and non-const overloads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55911858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com