Hi Arthur, On Thu, Jun 10, 2010 at 05:37:06AM -0700, awatt wrote: > > I have made a small bit of progress, when I changed > > template <class Service, class ServiceId, UOPT16 NumberOfServices> Service* > ServiceManager<Service, ServiceId, NumberOfServices>::s_used = 0; > > To be > > template <> DiffservService* > ServiceManager<DiffservService,DiffservServiceId,MAX_SERVICE_DS>::s_used = > 0; > > The some error went away, however there are still errors with the static > s_all array, the linker is not complaring about the non array static > template members any more. But I am still left with a problem on > > template <> DiffservService > ServiceManager<DiffservService,DiffservServiceId,MAX_SERVICE_DS>::s_all[ > MAX_SERVICE_DS ]; > > /cygdrive/s/ipw_products/sw_dev/common/pdc/tgt/rni/ose_ppc/./obj_app//pdc_rni.a(PDCProtocol.o): > In function `ServiceManager<DiffservService, DiffservServiceId, > 100ul>::release()': > ../../../incl/ServiceManager.cxx:265: undefined reference to > `ServiceManager<DiffservService, DiffservServiceId, 100ul>::s_all' > ../../../incl/ServiceManager.cxx:265: undefined reference to > `ServiceManager<DiffservService, DiffservServiceId, 100ul>::s_all' It would help us very much if you could provide a small self-contained test-program which reproduces your problem. What exactly are you trying to achieve? A problem I could imagine is, that you did not initialize the static member "s_all" in your code. The following code compiles and runs fine on my machine: template <typename A> struct B { static A c; static A d[6]; }; template <> int B<int>::c = 1; template <> int B<int>::d[] = {0,1,2,3,4,5}; int main() { std::cout << B<int>::c << " " << B<int>::d[2] << std::endl; } However, when I remove the two lines doing the initializations template <> int B<int>::c = 1; template <> int B<int>::d[] = {0,1,2,3,4,5}; I obtain the (correct) error about "undefined reference": /tmp/ccopRcqM.o: In function `main': t.cc:(.text+0x5d): undefined reference to `B<int>::d' t.cc:(.text+0x63): undefined reference to `B<int>::c' collect2: ld returned 1 exit status Maybe you are missing the initialization of "s_all"? (Just an additional remark: For constant static members, you can also write "static const int c1 = 0;" directly in the class. Then you don't need an external initialization) HTH, Axel