I believe the closest thing to what you would want is a reference to a pointer, which I have never been able to get to work with automatic arrays just by themselves.
Code:
template <class T>
class F
{
friend std::ostream & operator << (std::ostream &, F<T> &);
public:
F(void) : _t(0) { }
F(T t) : _t(t) { }
void printT(void) { std::cout << _t; }
private: T _t;
};
template <class T>
void rawr(F<T> *& l, size_t s)
{
for(size_t i = 0; i < s; ++i)
l[i].printT();
}
int main()
{
F<int> * fP = new F<int>[10];
F<int> fA[] = { 0, 1, 2, 3, 4 };
F<int> * fPA = fA;
rawr(fP, 10); std::cout << std::endl;
rawr(fA, sizeof fA / sizeof F<int>); // error
rawr(fPA, sizeof fA / sizeof F<int>); // okay
}