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

履歴 編集

# 変数テンプレートの部分特殊化を許可 [P2096R2](C++23)

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

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

## 概要

変数テンプレートの仕様として、部分特殊化の許可を意図したような仕様はあったが、部分特殊化の多くの仕様はクラステンプレートのみを対象にしていた。

C++23では部分特殊化の仕様を見直し、変数テンプレートの部分特殊化を明確に許可する。

## 例

    #include <iostream>

    template <class T>
    constexpr T zero = 0;

    template <class T>
    constexpr T* zero<T*> = nullptr;

    int main() {
      int x = zero<int>;
      int* y = zero<int*>;

      std::cout << x << std::endl;
      std::cout << y << std::endl;
    }

### 出力例

    0
    (nil)

## 関連項目

- C++14 変数テンプレート

## 参照

- P2096R2 Generalized wording for partial specializations