私はこのメンバ関数のテストを持っている:SFINAEは、メンバ関数存在テストの問題
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());' – Xeo