On Sat, 10 Apr 2021, 15:07 Klaus Rudolph via Gcc-help, <gcc-help@xxxxxxxxxxx> wrote: > Hi all, > > if I write a class with static member function I can use it as an > interrupt handler as follows: > > class Dummy > { > static void Handler() __asm__("__vector_10") > __attribute__((__signal__, __used__, __externally_visible__)); > }; > > void Dummy::Handler() > { > > } > > I can see the vector is entered in the handler table: > > > > 1c: 0c 94 34 00 jmp 0x68 ; 0x68 <__bad_interrupt> > 20: 0c 94 34 00 jmp 0x68 ; 0x68 <__bad_interrupt> > 24: 0c 94 34 00 jmp 0x68 ; 0x68 <__bad_interrupt> > 28: 0c 94 36 00 jmp 0x6c ; 0x6c <__vector_10> > 2c: 0c 94 34 00 jmp 0x68 ; 0x68 <__bad_interrupt> > 30: 0c 94 34 00 jmp 0x68 ; 0x68 <__bad_interrupt> > > ################### > > But if the class becomes a template, the function is not longer entered > in the handler. How can I fix it? > > template < int i > > class Dummy > { > static void Handler() __asm__("__vector_10") > __attribute__((__signal__, __used__, __externally_visible__)); > }; > > template < int i> > void Dummy<i>::Handler() > { > > } > > Dummy<1> d1; > This doesn't cause the instantiation of the member function. Have you tried an explicit instantiation? template class Dummy<1>;