を使用する関数を前方宣言するのに問題がありますboost::enable_if
。次のコードではコンパイラ エラーが発生します。
// Declaration
template <typename T>
void foo(T t);
// Definition
template <typename T>
typename boost::enable_if<boost::is_same<T, int> >::type foo(T t)
{
}
int main()
{
foo(12);
return 0;
}
コンパイル時に、「foo へのあいまいな呼び出し」エラーが発生します。の定義によるとenable_if
、'type' typedefvoid
は条件が true の場合に対応するため、私が見る限り、2 つのシグネチャはfoo
一致します。なぜコンパイラはそれらが異なると考えるのですか?また、前方宣言する正しい方法はありますかfoo
(できれば、その部分を繰り返さないでenable_if
ください)?