linux - Visibility of template specialization of C++ function -


suppose have filea.h declares class classa template function somefunc<t>(). function implemented directly in header file (as usual template functions). add specialized implementation of somefunc() (like somefunc<int>()) in filea.c (ie. not in header file).

if call somefunc<int>() other code (maybe library), call generic version, or specialization?

i have problem right now, class , function live in library used 2 applications. , 1 application correctly uses specialization, while app uses generic form (which causes runtime problems later on). why difference? related linker options etc? on linux, g++ 4.1.2.

it an error have specialization template not visible @ point of call. unfortunately, compilers not required diagnose error, , can code (in standardese "ill formed, no diagnostic required").

technically, need define specialization in header file, every compiler handle might expect: fixed in c++11 new "extern template" facility:

extern template<> somefunc<int>(); 

this explicitly declares particular specialization defined elsewhere. many compilers support already, , without extern.


Comments

Popular posts from this blog

c++ - How do I get a multi line tooltip in MFC -

asp.net - In javascript how to find the height and width -

c# - DataTable to EnumerableRowCollection -