Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 137645
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T07:08:20+00:00 2026-05-11T07:08:20+00:00

ISO C++ says that the inline definition of member function in C++ is the

  • 0

ISO C++ says that the inline definition of member function in C++ is the same as declaring it with inline. This means that the function will be defined in every compilation unit the member function is used. However, if the function call cannot be inlined for whatever reason, the function is to be instantiated "as usual". (http://msdn.microsoft.com/en-us/library/z8y1yy88%28VS.71%29.aspx)

The problem I have with this definition is that it does not tell in which translation unit it would be instantiated. The problem I encountered is that when facing two object files in a single static library, both of which have the reference to some inline member function which cannot be inlined, the linker might "pick" an arbitrary object file as a source for the definition. This particular choice might introduce unneeded dependencies. (among other things)

For instance: In a static library

A.h:   class A{   public:     virtual bool foo() { return true; } }; 

U1.cpp:

A a1; 

U2.cpp:

A a2; 

and lots of dependencies

In another project main.cpp:

#include "A.h"  int main(){   A a;   a.foo();   return 0; } 

The second project refers the first. How do I know which definition the compiler will use, and, consequently which object files with their dependencies will be linked in? Is there anything the standard says on that matter? (Tried, but failed to find that)

Thanks

Edit: since I’ve seen some people misunderstand what the question is, I’d like to emphasize: If the compiler decided to create a symbol for that function (and in this case, it will, because of ‘virtualness’, there will be several (externally-seen) instantiations in different object file, which definition (from which object file?) will the linker choose?)

  • 1 1 Answer
  • 1 View
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T07:08:20+00:00Added an answer on May 11, 2026 at 7:08 am

    When you have an inline method that is forced to be non-inlined by the compiler, it will really instantiate the method in every compiled unit that uses it. Today most compilers are smart enough to instantiate a method only if needed (if used) so merely including the header file will not force instantiation. The linker, as you said, will pick one of the instantiations to include in the executable file – but keep in mind that the record inside the object module is of a special kind (for instance, a COMDEF) in order to give the linker enough information to know how to discard duplicated instances. These records will not, therefore, result in unwanted dependencies between modules, because the linker will use them with less priority than ‘regular’ records to resolve dependencies.

    In the example you gave, you really don’t know, but it doesn’t matter. The linker won’t resolve dependencies based on non-inlined instances alone ever. The result (in terms of modules included by the linker) will be as good as if the inline method didn’t exist.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

The ISO definition of generalized markup states: Markup should be rigorous so that the
I have been reading the ISO 14882:2003. It says: s-char: any member of the
I received an email which uses the charset iso-8859-8-i . iconv says that it
I know (hopefully) that MSVC 9.0 Implements C++ 2003 ( ISO/IEC 14882:2003 ). I
The ISO 1998 c++ standard specifies that not explicitly using a return statement in
On a website ( http://webdesign.onyou.ch/2010/08/04/javascript-time-ago-pretty-date/ ) I found this very useful function, you give
Can anyone explain this statement from ISO N3242 §3.2, 2nd point A non-placement allocation
Can anyone explain this statement from ISO N3242 §3.2, 2nd point An expression is
Apparently, MSVC2005 fails to inline local classes' member functions which leads to LNK2005. I'm
In ISO/IEC 9899:TC2, the standard says following 6.3.2.3 Pointers A pointer to an object

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.