[Bug c++/59475] gcc with flag -O1 fails to find template specialization when there is default one.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59475 --- Comment #5 from Akela1101 akela1101 at gmail dot com --- I see... So, at -O1 in main.o the function is inline, and in A.o it has outer implementation. At -O0 in both TU, not inline function is using. The thing was not template specialization, but processing inline functions. Sorry, I didn't know linker even had no warnings like multiple definition for inline functions, e.g.: TU 1: int foo() { return 1; } TU 2: inline int foo() { return 2; }
[Bug c++/59475] New: gcc with flag -O1 fails to find template specialization when there is default one.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59475 Bug ID: 59475 Summary: gcc with flag -O1 fails to find template specialization when there is default one. Product: gcc Version: 4.8.2 Status: UNCONFIRMED Severity: major Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: akela1101 at gmail dot com Different behaviour with -O1 and without. In first case g++ doesn't see template instantiation in .cpp and uses default. In second case it uses .cpp even without function declaration. Tested on x86 gcc-4.8.2 and x64 gcc-4.7.2. Example: === A.h === #ifndef A_H #define A_H templatetypename T int foo(T) { return 10; } struct A { int x; }; //template //int foo(A t); #endif // A_H === A.cpp === #include A.h template int foo(A t) { return t.x; } === main.cpp === #include A.h int main() { A a; a.x = 5; int b = 10; if( foo(a) == foo(b) ) return 1; return 0; } === Run script from attachment. Output must be: $ ./run.sh Without flags 0 With -O1 1
[Bug c++/59475] gcc with flag -O1 fails to find template specialization when there is default one.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59475 --- Comment #1 from Akela1101 akela1101 at gmail dot com --- Created attachment 31421 -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=31421action=edit ii, source, sh script
[Bug c++/59475] gcc with flag -O1 fails to find template specialization when there is default one.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59475 --- Comment #3 from Akela1101 akela1101 at gmail dot com --- Thank you. But could you explain in more detail, why results of this little program are different depending on -O1 flag? I thought they both should be 0. Or am I wrong?