template class grille { public: grille(); T &operator[](const unsigned int); template friend std::ostream &operator<<(std::ostream &, const grille &g); private: T tab[a][b]; }; /// Bruno propose: /* template class grille { public: grille() {} T* operator[](const unsigned int x) { return tab[x]; } private: T tab[a][b]; }; template std::ostream &operator<<(std::ostream &out, const grille &g) { std::cout << "Test" << std::endl; return out; } */