我有一个问题,即创建函数指针编译错误重载函数结果对于g ++ 4.7和g ++ 4.8但不在克++ 4.4,G ++ 4.6或铛++ 3.2(以及可能VS2010).
谷歌搜索了一下是为了解问问题是用g ++还是我的代码,我还是无法决定.适用于函数指针转换的重载决策规则是否不同于适用于函数调用的规则?
这是一个稍微最小化的代码,用于演示此问题:
template < class T >
struct Dummy {
typedef T value_type;
value_type value;
};
template < class T >
typename T::value_type f (const T& x) {
return x.value;
}
template < class T >
T f (Dummy< T > const& x) {
return x.value + 1;
}
int main (int, char**) {
Dummy< int > d = { 1 };
// No ambiguity here
d.value = f(d);
// …Run Code Online (Sandbox Code Playgroud)