Boost logo

Boost Users :

Subject: Re: [Boost-users] Inline functions in boost/utility
From: joaquin_at_[hidden]
Date: 2009-02-11 08:22:18


Ovanes Markarian escribió:
>
>
> On Tue, Feb 10, 2009 at 5:59 PM, Niels Dekker - mail address until
> 2010-10-10 <niels_address_until_2010-10-10_at_[hidden]
> <mailto:niels_address_until_2010-10-10_at_[hidden]>> 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?
>
>
> 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:

Yep, but this does not apply to function templates, which can be defined in
different translation units, with the only requirement that the
definition coincides
in each unit. See http://tinyurl.com/crkyl3 , and in particular the
answer from
Daveed Vandevoorde. AFAICS the get's in utility/value_init.hpp are
all function templates.

Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net