タイトルに記載されていることを実行しようとしています。
template <class T>
void foo(const Foo* f) // this is general case template
{
}
// this should work only if T has static variable named _Foo with type const Foo*
template <class T>
typename std::enable_if<std::is_same<decltype(T::_Foo), const Foo*>::value>::type
foo(const Foo* f)
{
T::_Foo = f;
}
しかし、それはコンパイルに失敗します:
error C2039: 'type' : is not a member of 'std::enable_if<false,void>'
enable_if が失敗した場合、デフォルトで最初の実装にすべきではありませんか? ここで何が欠けているのか、誰かが何が間違っているのか、そしておそらく解決策を教えてください。(問題はこの単純な decltype(T::_Foo) にあると感じています)