On Tue, Feb 10, 2009 at 5:59 PM, Niels Dekker - mail address until
2010-10-10
Timenkov Yuri wrote:
Looking through assembly code of simple test produced by gcc with
optimization, I've noticed that free functions in utility/value_init.hpp (get and set) are not declared as inline, though its body consist only of prologue and epilogue.
Is there any reason for this or just a bug?
Sorry, I don't really get it. First of all, utility/value_init.hpp doesn't have a "set". Do you mean "swap"? But secondly it's really up to the compiler whether or not those functions are inlined. An "inline" keyword would only be a hint to the compiler to do so, in this case. But as value_init.hpp provides the complete definitions of the function templates, it shouldn't be hard for the compiler to apply inlining. Are you saying that gcc would /only/ inline those functions, when they are declared as inline?
Yuri, Niels is right. This article might be of interest for you. http://www.gotw.ca/gotw/033.htm There are cases where you must declare a function as inline, otherwise a linker will have ambiguity of more than one identical symbols and fail to link: header.h void foo() { // ... } cpp_file1.cpp #include "header.h" ... cpp_file2.cpp #include "header.h" ... This app will compile, but there will be 2 implementations of void foo(), since each compilation unit will generate it's own one. Linker will fail due to ambiguity which symbol is the right one. To fix this problem you have to either leave a function declaration in the header and move its definition into a cpp file or declare this function as inline. Best Regards, Ovanes