$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
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