いろきゅうの(元)はてなダイアリー

はてなダイアリーから移行中…

コンパイル不可能

コンパイルできないコードに遭遇しました。某所に投稿してみたりもしましたが、解決せず…。折角なので、こっちにも残しておきます。
コンパイラ = VC7.1
boost    = 1.32.0

---------------------------------------
#include <boost/array.hpp>

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();
}
---------------------------------------

色々実験した結果(ほかの方の結果も含む)
・UINT を int にすると通る。
・UINT を std::size_t にしてもダメ。
・typename T を削除して、 boost::array の T を int とかにすると通る。
・boost:array の nSize を適当な数値で直打ちすると通る。
・bcc5.5.1 では普通に通る。
・関数の戻り値を typename boost::array<T, nSize>::iterator にすると通る。



…さて、私のコードが悪いのか。やっぱり、MSのコンパイラが悪いのか……^^;