次のコードはビルドが通ってくれません…
// 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
では問題なくコンパイルが通ったりします。意味わかりません。^^;
これがバグと言わずと何と言おうか!!!
…え、実は私の知らない仕様があったりしたりするん?^^;