【发布时间】:2012-06-30 09:55:53
【问题描述】:
我有这个成员函数测试:
template <typename T>
struct has_member {
template <typename U> static true_type f(decltype(declval<U>().member()) *);
template <typename> static false_type f(...);
static const bool value = decltype(f<T>(0))::value;
};
当存在具有给定名称的成员函数时,如果该函数具有不带参数的重载,则它的计算结果为 true。对于此类函数以及 STL 容器,它可以正常工作,但元素访问函数(前、后等)除外,在这些函数中,它总是计算为 false。
这是为什么呢?我有 mingw g++ 4.7。
【问题讨论】:
-
更改为尾随返回类型有帮助吗?
auto f(U* p)-> decltype(p->member(), true_type());