不完全でも構いません)。不完全でも構いません)。宣言しますが、定義しません。(いかなるエンティティも定義しません)。(いかなるエンティティも定義しません)。(いかなるエンティティも定義しません)。(いかなるエンティティも定義しません)。(いかなるエンティティも定義しません)。宣言しますが、定義しません。(C++11以上)その宣言が定義でない明示的特殊化。宣言しますが、定義しません。宣言は、いかなるエンティティも定義しませんが、定義に分類されます。コンパイラは、必要な場面では、デフォルトコンストラクタ、コピーコンストラクタ、ムーブコンストラクタ、コピー代入演算子、ムーブ代入演算子、およびデストラクタを、暗黙に定義する場合があります。(宣言は複数あっても構いませんが、定義は一度しか許されません)。される、インラインでないすべての関数または変数の定義が、プログラム全体で、一度だけ要求されます。コンパイラはこの違反を診断することを要求されませんが、これに違反するプログラムの動作は未定義です。使用されるすべての翻訳単位で要求されます。クラスの定義は、そのクラスが完全であることを要求する方法で使用されるあらゆる翻訳単位で、一度だけ現れることが要求されます。定義は、プログラム内に複数存在することができます。それぞれの定義が異なる翻訳単位に現れる。定義が名前付きモジュールにアタッチされていない。(一般的には、同じヘッダファイル内に現れる)。同じエンティティを発見する。使用されず、すべての定義が同じ値を持つ限り、異なるオブジェクトを参照しても構いません。(C++20以上)内ではないラムダ式は、それらを定義するために使用された一連のトークンによって一意に識別されます。(その定義内で定義されたものを参照する場合は除きます)。ブロックの内側でない)。上記3つのルールは、それぞれの定義内で使用されるすべてのデフォルト引数に適用されます。使用されるすべての翻訳単位は、基底およびメンバに対する同じコンストラクタを呼ばなければなりません。使用されるすべての翻訳単位はその基底およびメンバに対して同じ比較演算子を呼ばなければなりません。(C++20以上)定義がテンプレートの場合、これらのすべての要件が定義時点の名前と実体化時点の依存名の両方に適用されます。これらのすべての要件が満たされるならば、プログラム全体で定義が一度だけであるかのように動作します。(診断は要求されません)。宣言が、異なる翻訳単位で異なる型を持つことさえできます。上で述べた通り、同じ型の宣言で使用されるソースコードトークンは同じでなければなりません。定義した場合、それらを一緒にリンクするプログラムの動作は未定義です。