次の関数テンプレートは、指定したメンバへのポインタが配列型のメンバのものである場合、その要素数を返します。
| 0 1 2 3 4 5 6 | template <typename T, typename C, std::size_t N> std::size_t member_count_of(T (C::*pm)[N]) {   return N; } | 
C++11以降であればconstexprを付ければ定数式に展開できますが、C++03までは定数式に展開できません。そこで、定数式に展開可能なテンプレートについても考えてみましょう。
| 0 1 2 3 | template <typename T, typename C, std::size_t N> char (* member_count_type_of(T (C::*pm)[N]) )[N]; | 
member_count_type_of関数テンプレートは関数原型しかありません。これを使って、
| 0 1 2 | sizeof *member_count_type_of(&A::array) | 
のようにしてやれば、メンバの要素数を定数式として取り出すことができます。






