最終更新日時: 2025年07月10日 10時26分30秒 (JST)
Koichi Murase が更新

履歴 編集

# テンプレートのエクスポート機能を削除(C++11)

このページはC++11に採用された言語機能の変更を解説しています。

のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

## 概要

C++11では、テンプレート定義をエクスポートする機能を削除する。

テンプレートのエクスポート機能は、ヘッダファイルでテンプレートを宣言し、ソースファイルでテンプレートを定義することで、コンパイル時間の短縮を目指すものであった。

    // f.h
    template <class T>
    void f();

    // f.cpp
    export template <class T>
    void f()
    {
      ...
    }

EDGフロントエンドとそれを使用するコンパイラのComeauとICCが唯一このエクスポート機能を実装したが、EDGはエクスポート機能の実装は困難であるために実装することを推奨しないとし、他のコンパイラベンダがこの機能を実装することはなかった。

エクスポート機能が標準C++に採択されてから10年が経過し、他のコンパイラベンダがこの機能に関心を持つことはなかったため、この機能を削除するに至った。

`export`キーワードはC++11標準では使用しなくなったが、後にC++20のモジュールで再利用された。

## 参照

- N3065 Removing Export
- CWG Issue 820. Deprecation of export
- Using export keyword with templates - StackOverflow
- N1426 Why We Can't Afford Export