次のコードはビルドが通ってくれません…
// 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)'
色々実験してみた結果(他の人の協力含む)
UINT を int にすると通る。
UINT を std::size_t にしてもダメ。
typename T を削除して、 boost::array の T を int とかにすると通る。
boost::array の nSize を適当な数値で直打ちすると通る。
bcc5.5.1 では普通に通る。
typename boost::array<T, nSize>::iterator にすると通る。
どーも、unsigned int だと機嫌が悪い模様。
ちなみに、unsigned short や unsigned char, unsigned __int64 では問題なくコンパイルが通ったりします。意味わかりません。^^;
これがバグと言わずと何と言おうか!!!
…え、実は私の知らない仕様があったりしたりするん?^^;