静的配列の要素数を取得する

MSDNstrcpy_sの説明を見てて、初めて知ったC++の書き方。

C++ では、これらの関数の使用はテンプレートのオーバーロードによって簡素化されます。オーバーロードでは、バッファ長を自動的に推論できる (サイズの引数を指定する必要がなくなる) だけでなく、古くてセキュリティが万全ではない関数を新しく安全な関数に自動的に置き換えることができます。詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。

とあって、どんな定義になっているかというと

template <size_t size>
errno_t strcpy_s(
   char (&strDestination)[size],
   const char *strSource 
); // C++ only

同じ引数の関数を作って実行してみると、確かに変数「size」に配列の要素数が入ってくる。
でも、構文の意味が分からない。
テンプレート恐ろしい。

追記

とりあえず、意味は分からないけど、パクッて配列の数を取得する関数を作ってみた。
意外と便利

template <typename T, size_t size>
size_t ArrayCount( T(&dummy)[size])
{
	return size;
}