次の種類の ID には、リンケージがありません。
リンケージを持たない名前を使用して、リンケージを持つエンティティーを宣言することはできません。 例えば、リンケージを持たないエンティティーを指すクラスまたは列挙の名前、あるいは typedef 名を 使用して、リンケージを持つエンティティーを宣言することはできません。 次の例は、このことを示しています。
int main() { struct A { }; // extern A a1; typedef A myA; // extern myA a2; }
コンパイラーは、外部結合を持つ a1 の宣言を許可しません。 クラス A は、リンケージを持っていません。 コンパイラーは、外部結合を持つ a2 の宣言を許可しません。 A がリンケージを持っていないので、typedef 名 a2 は、リンケージを持っていません。
関連参照