【C++】One definition ruleってなに?

One definition rule(ODR)の基本概念

このことは、ISO C++ Standard(ISO/IEC 14882) section3.2に記してある。

In any translation unit, a template, type, function, or object can have no more than one definition. Some of these can have any number of declarations. A definition provides an instance.

In the entire program, an object or non-inline function cannot have more than one definition; if an object or function is used, it must have exactly one definition. You can declare an object or function that is never used, in which case you don't have to provide a definition. In no event can there be more than one definition.

Some things, like types, templates, and extern inline functions, can be defined in more than one translation unit. For a given entity, each definition must be the same. Non-extern objects and functions in different translation units are different entities, even if their names and types are the same.



class C {}; // first definition of C
class C {}; // error, second definition of C