エラーの性質は、このスレッドで言及されているものとは異なります。
クラスにメンバー(メソッド)が含まれているかどうかを確認する SFINAE 方法を VC++ 環境に実装しようとしています。
以下は、そのための単純化されたコードです。
template<typename Class>
class HasMember_Method
{
typedef char (&yes)[2];
template<unsigned int> struct Exists;
template<typename V>
static yes CheckMember (Exists<sizeof(&V::Method)>*); // <--- VC++ problem
template<typename>
static char CheckMember (...);
public:
static const bool value = (sizeof(CheckMember<Class>(0)) == sizeof(yes));
};
これが私Method
たちが探しているメンバーメソッドです。このコードは、 C++11 がなくてもg++ 環境で完全に機能します。
ただし、同じ結果、バグのある VC++ のコンパイラ エラーが発生します。
エラー C2070: 'overloaded-function': 不正な sizeof オペランド
を使用して SFINAE の他の回避策を試しましdecltype
たが、うまくいきませんでした。この問題の修正またはより良い回避策はありますか?