Addresses of identical function template instantiations across compilation units

前端 未结 2 445
小鲜肉
小鲜肉 2020-12-06 03:22

Why does this work?

I see similar SO questions stating that it does, but could someone explain it in more detail? Particularly, is this behavior protected by a stan

2条回答
  •  情话喂你
    2020-12-06 03:38

    This is covered under the one definition rule:

    3.2 One definition rule [basic.def.odr]

    Paragraph 5:

    There can be more than one definition of a class type (Clause 9), enumeration type (7.2), inline function with external linkage (7.1.2), class template (Clause 14), non-static function template (14.5.6), static data member of a class template (14.5.1.3), member function of a class template (14.5.1.1), or template specialization for which some template parameters are not specified (14.7, 14.5.5) in a program provided that each definition appears in a different translation unit, and provided the definitions satisfy the following requirements. Given such an entity named D defined in more than one translation unit, then

    There is a whole list of criteria that follow that have to be-adhered to or its undefined behavior. In the above these do hold. Then ...

    If the definitions of D satisfy all these requirements, then the program shall behave as if there were a single definition of D.

    So technically you can have a copy of the function in each translation unit.

    It looks like the wording in the last phrase though makes it a requirement that they all behave the same. This means taking the address of any of these objects should result in the same address.

提交回复
热议问题