如何解决C ++:MSVC错误C2668:不明确的模板化重载,适用于GCC和CLang
我在此代码上收到MSVC C2668错误:
#include <vector>
#include <functional>
class A {
public:
class B {
public:
bool isValid() const {return true;}
void foo() const {};
};
std::vector<B> container;
};
template <class T>
inline void myForEach(const T &m,std::function<void (const typename T::B &)> action) {
for(auto b : m.container)
if(b.isValid())
action(b);
}
template <class T>
inline void myForEach(T &m,std::function<void (typename T::B &)> action) {
for(auto b : m.container)
if(b.isValid())
action(b);
}
void bar(const A& obj) {
myForEach(obj,[&](const A::B& b){
b.foo();
});
}
int main(int,char *[]) {
A obj;
bar(obj);
return 0;
}
MSVC似乎无法消除A对象的常数性:
note: may be 'void myForEach<const A>(T &,std::function<void (A::B &)>)'
with
[
T=const A
]
note: or 'void myForEach<A>(const T &,std::function<void (const A::B &)>)'
with
[
T=A
]
在此代码中是否存在不能消除歧义的内容?我该怎么做才能使其具有正确的const正确性? GCC和CLang构建没有错误。 我正在使用VS 2019,v16.7.3和MSVC 16.6.30225.117。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。