私はこのメンバー関数テストを持っています:
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 と評価される要素アクセス関数 (front、back など) を除いて、適切に機能します。
何故ですか?私は mingw g++ 4.7 を持っています。