Привет. Стандарт не читал, не знаю. Но возможно чем-нибудь помогу.
Например, вот этот код скомпилируется думаю везде, хотя не знаю почему студия не компилит твой код(
она почему то считает что тип параметра который указан в объявлении не соответствует типу параметра, который используется в определении ) :
template <typename F>
class Container
{
public:
class Iterator
{
typedef int (&MasInt) [F::Count];
friend class Container<F>;
Iterator(MasInt);
MasInt values_;
};
Iterator begin()
{
return Iterator(values_);
}
private:
int values_[F::Count];
};
template <typename F>
Container<F>::Iterator::Iterator(MasInt values) : values_(values)
{
}
class SomeF
{
public:
static const int Count = 10;
};