http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55778
--- Comment #2 from ph dunski <koala01 at free dot fr> 2012-12-21 19:17:05 UTC --- (In reply to comment #1) > (In reply to comment #0) > > Am i wrong ? > > Yes. The foo(std::string const&, Args...) overload is not in scope within > foo(int, Args...) so the call resolves to the foo(Args...) overload. If you say so ... But in this case, how is it possible to have a diffrent behavior simply by switching foo (const std :: string &, Args ..) and foo (int, args ...) implemented? If you just try to compile my first test code, you will see that the execution stops before writing the string, 3 more. If you go foo (std :: string const &, Args ..) and foo (int, args ...) implemented in the code, you will see that the execution stops after writing the string, with argument 2 more. I've always heard that the implementation order should not have an impact on the final result. Am i rong again?