2017-01-18 6 views

答えて

2

周囲のクラスタイプパラメータに依存しているため、SFINAEが失敗します。 SFINAEは、コンパイラが呼び出しに基づいて把握しようとする関数型の引数である演繹型の引数に対してのみ機能します。

コンパイラが明示的に取得し、その後、むしろ推測しますSFINAEがSに基づいて
template<class S = Callback, typename cb_test<decltype(S::barEvent)>::type=0> 
void barEventRegister(has_member) 

、:

修正は次のようになります。

また、2回目のオーバーロードには、ではなく、has_not_memberが必要です。今のように、メンバが存在していても、テンプレート以外のオーバーロードが選択されるため、メンバが存在しても常に選択されます。

関連する問題