On Tue, Feb 10, 2009 at 7:59 PM, Niels Dekker - mail address until 2010-10-10 <niels_address_until_2010-10-10@xs4all.nl> wrote:
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?
Actually there are 2 get functions :) (one is const one), but when I glanced through this file I saw first get and assumed the second one should be set.

As already said in this thread, they are template functions (therefore they can be defined in header), but since they aren't declared as inline, gcc doesn't try to inline them.

I supposed this happened because member functions defined in class declaration are inline (I don't remember the exact paragraph of standard), so most of boost library may be inlined by compiler. But here developer might forgot to declare free function as inline too.



Kind regards,
--
Niels Dekker
http://www.xs4all.nl/~nd/dekkerware
Scientific programmer at LKEB, Leiden University Medical Center




_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users