2015-11-27 13 views
6

私は今オープンソースの画像処理プロジェクトolenaをコンパイルしています。これは素晴らしい画像処理ライブラリであり、私はそれをLinux(4.6.3)用にコンパイルに成功しました。私はWindowsに慣れているので、私も、私はそれをコンパイルするときしかし、私はC2064エラーメッセージ持ちのVisual Studio 2010とWindowsでプロジェクトをコンパイルしよう:エラーメッセージに続いてエラーC2064 for Windows

Error 1 error C2064: term does not evaluate to a function taking 0 arguments C:\olena-2.1\olena-2.1\milena\mln\metal\is_a.hh 101 

を、私が出てきます

/*! 
     \internal 
     \brief "is_a" check. 

     Check whether T inherits from _CONCEPT_ M. 
    */ 
    template <typename T, template <class> class M> 
    struct is_a : bool_<( 
      sizeof(internal::helper_is_a_< T, M >::selector(internal::make_<T>::ptr())) //**ERROR** 
       == 
       sizeof(internal::yes_) )> 
    {}; 

非常に短いコードスニペットですが、どこからエラーが発生するのかわかりません。何か案は?ありがとう。

注:次のようにinteranl::make_<T>::ptr()

定義は:

template <typename T> 
    inline 
    T* 
    make_<T>::ptr() // This piece of code is defined to prevent an ICE from g++-2.95. 
    { 
     T* tmp; 
     return tmp; 
    } 

template <typename T> 
     struct make_ 
     { 
    static T* ptr(); 
     }; 

iternal::helper_is_a_のdefinitonが

template <typename T, template <class> class M> 
     struct helper_is_a_ 
     { 

    template<class V> 
    static yes_ selector(M<V>*); 
    static no_ selector(...); 
     }; 
+3

VS 2010 C++コンパイラは、テンプレートに関してはかなり不備があります。テンプレートのサポートが大幅に改善された新しいバージョンで確認することをお勧めします。 –

+0

コンパイル中の実際の 'is_a'呼び出しとその他すべてを含む完全なエラーメッセージを提供してください。 – Codeguard

+0

bool_、internal :: helper_is_a_およびそれはセレクタ()メソッドです。明らかに、関連するすべてのテンプレートの完全な定義を調べることなく、この質問に答えることはできません。セレクタタイプではない方法でなければならないよう –

答えて

0

これは(VS2008でテスト)動作しますあります。

template <typename T, template <class> class M> 
struct is_a 
{ 
    static const bool value = bool_<(sizeof(internal::helper_is_a_< T, M >::selector(internal::make_<T>::ptr())) 
     == 
     sizeof(internal::yes_) )>::value; 
}; 

理由を問わず、sizeofを基本クラスまたはメンバーとして見たときにすぐにsizeofを評価しようとします。 元のコードはVS2013 C++ 11でコンパイルされます。