unsigned int と template と boost::array と

次のコードはビルドが通ってくれません…


// UINT がいけない?
template<typename T, UINT nSize>
class A 
{ 
    typedef typename    boost::array<T, nSize>  tObjects; 
    typedef typename    tObjects::iterator      tObjectsIt; 
    tObjects            m_cObjects; 

public: 

    tObjectsIt Func(); 
}; 

// ↓C2244:関数の定義を既存の宣言と合致させることができませんでした。
template<typename T, UINT nSize> 
__inline typename A<T, nSize>::tObjectsIt A<T, nSize>::Func() 
{ 
    return  m_cObjects.begin(); 
}


int _tmain(int argc, _TCHAR* argv[])
{
    A<int, 64>  a;  // とりあえず、なんかつくっとこ。
    a.Func();

    return 0;
}

コンパイル結果出力


t02.cpp(25) : error C2244: 'A<T,nSize>::Func' : 関数の定義を既存の宣言と合致させることができませんでした。
    t02.cpp(17) : 'A<T,nSize>::Func' の宣言を確認してください。
    定義
    'A<T,nSize>::tObjectsIt A<T,nSize>::Func(void)'
    既存の宣言
    'A<T,nSize>::tObjectsIt A<T,nSize>::Func(void)'

色々実験してみた結果(他の人の協力含む)

どーも、unsigned int だと機嫌が悪い模様。
ちなみに、unsigned shortunsigned char, unsigned __int64 では問題なくコンパイルが通ったりします。意味わかりません。^^;

これがバグと言わずと何と言おうか!!!

…え、実は私の知らない仕様があったりしたりするん?^^;

▲このページのTOP▲