::value はなんですか？


下記コードの `::value` はなんでしょうか？  
コンパイル時にテンプレートが処理されるときに、値が決定する特殊な変数のようなものでしょうか？  
文法的になにか名称はありますか？

おそらく自分で似たような用法のテンプレートを自作するときは、value
でなくて、名前はなんでもよいと推測しているのですが、valueでないといけないなどのルールはありますか？

[code]

    #include <iostream>
    
    int main(int argc, const char * argv[]) {
      std::array<int, 3> a = { 1, 2, 3};
    
      auto size = std::tuple_size<decltype(a)>::value;
    
      std::cout << size;
      return 0;
    }
    
[/code]

* * *

追記：  
コメントで紹介いただいた  
[std::tuple_sizeクラスの説明書](https://cpprefjp.github.io/reference/array/array/tuple_size.html)
や [std::tuple_size](https://cplusplus.com/reference/tuple/tuple_size/) や
[tuple_size クラス](https://learn.microsoft.com/ja-jp/cpp/standard-library/tuple-
size-class-tuple?view=msvc-170)  
によると

  * integral_constantの機能
  * member constant
  * 整数定数式であるメンバー value

と呼ばれているもののようですね。

結局どこを見ればいいのか、不明ですが（おそらく公式はISOなのでカジュアルに見れない？）、「integral_constantの機能」で深掘りして、さらに見てみると下記に辿り着きました。

<https://cpprefjp.github.io/reference/type_traits/integral_constant.html>  
にある通り、`integral_constant` 構造体のメンバー変数であるvalueという認識でよいのでしょうか？

`static constexpr` とすれば、テンプレートの評価時に定数を入れることができる用法（テクニック）があるということですかね。

質問を整理すると（整理というには強引ですが）

  * この value は構造体のメンバー変数であっているか？
  * こんな用法が使えるのは `static constexpr` のおかげか？

という感じになりそうです。（おそらく合っていそうな気はしますが、あくまで推測です）

