При попытке скомпилировать следующий код Visual Studio Express 2005 выдаёт ошибку компиляции "unable to match function definition to an existing declaration". При этом GCC и даже Borland C++5.5 компилируют его без каких-либо проблем. С чем может быть связана эта ошибка и можно ли считать её ошибкой компилятора? Является ли этот код допустимым по стандарту языка?
template <class F>
class Container
{
public:
class Iterator
{
friend class Container<F>;
Iterator(int (&values)[F::Count]);
int (&values_)[F::Count];
};
Iterator begin()
{
return Iterator(values_);
}
private:
int values_[F::Count];
};
template <class F>
Container<F>::Iterator::Iterator(int (&values)[F::Count]) : values_(values)
{}
class SomeF
{
public:
static const int Count = 10;
};
int main(int argc, char *argv[])
{
Container<SomeF> container;
}