質問

私はいくつかのトラブル前方 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の定義によれば、条件が真であるときに限り、私は見ることができるように、voidに対応typedefの「タイプ」、fooマッチの2人の署名。なぜコンパイラは、彼らが異なっていると思うし、(好ましくはfooの一部を繰り返すことなく)enable_ifを宣言転送する正しい方法はありますでしょうか?

他のヒント

問題は、宣言と定義が一致していないということです。

この溶液を宣言は全く同じシグネチャ、およびenable_ifビットを含むべきであるということである。

#include <boost/type_traits/is_same.hpp>
#include <boost/utility/enable_if.hpp>

// Declaration
template <typename T>
typename boost::enable_if<boost::is_same<T, int> >::type 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;
}

これは、VC2008の罰金コンパイルします。

scroll top