[LLVMdev] inlining hint

Cédric Venet cedric.venet at laposte.net
Thu Aug 27 06:53:59 PDT 2009


David Vandevoorde a écrit :
> On Aug 27, 2009, at 3:07 AM, Cédric Venet wrote:
>
>   
>> David Vandevoorde a écrit :
>>     
>>> I don't think those are _good_ reasons though: If one doesn't want  
>>> a C+ + function to be inlined, one shouldn't define it inline.
>>>
>>>
>>>       
>> You must not have written a lot of C++ template then.
>>     
>
> (Ha!)
>   

:) ok, your name didn't register at first, but I have read (part of) 
your book. sorry for the tone of my reply which was not very friendly 
(It happen often to me with mail, but this is not an excuse). I just 
didn't and still don't understand how you do it, but this is probably 
not the good place to discuses this.
please accept my sincere apologies.

>
> I don't think that how standard library or STL headers _are_ written  
> determines how they _should be_ written.
>
> (Templates don't force us to write excessive inline functions: Leave  
> off the inline keyword and write a member function outside the class  
> template definition, and it's no longer an inline function.)
>   

What about multiple translation unit then? because from my 
understanding, this will generate multiple definition of symbol, so you 
will never be able to link it (except with some strange link 
specification (weak or something like this) which seem less portable 
than declaring the function inline). From the standard:

    Every program shall contain exactly one definition of every 
non-inline function or object that is used in that
    program; no diagnostic required. The definition can appear 
explicitly in the program, it can be found in the
    standard or a user-defined library, or (when appropriate) it is 
implicitly defined (see 12.1, 12.4 and 12.8).
    An inline function shall be defined in every translation unit in 
which it is used.

regards,

Cédric






More information about the llvm-dev mailing list