Hi Jakub, Your problem is not with templates. Here's your problem in a nutshell... struct A { int x; struct B { A a; }; }; You cannot use A within B, because at that point A is incomplete. You can pull B out of A. If you want B to be in the A namespace, change 'struct A' to 'namespace A', and make 'struct A_impl', fully declared, and then use that within 'struct B'. HTH, --Eljay