http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56760
--- Comment #10 from erik.thi...@thiele-hydraulik.de 2013-03-28 16:50:06 UTC --- But the function actually IS defined, because the call func(foo,b) works. Yes it is not defined early enough maybe. But the linker is run after the compiler. How can the linker differentiate about when something is implemented? doesn't it just look for the symbol and if it is there, then it is there? as mentioned in my post 2013-03-28 08:27:34 UTC the signature of the missing implementation is exactly the same in the error message if you leave out the template definition than if you do the line that you call invalid C++. So maybe the linker output should show more detail. The linker sais that an implementation is missing, which is NOT missing. so maybe there is some additional clue that the linker could display here? is there some hidden additional information in the function signature somehow? the section about name lookup changes talks about the -fpermissive option which should reactivate the old behaviour. but that does not work. anyway... what could be a workaround? as mentioned earlier I cannot do a forward declaration. This really puzzles me...