コンパイルできないコードに遭遇しました。某所に投稿してみたりもしましたが、解決せず…。折角なので、こっちにも残しておきます。
コンパイラ = 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のコンパイラが悪いのか……^^;