テンプレートと参照渡しを利用して配列の要素数を取得する

C++テンプレートテクニック 2-4

#include <iostream>
using std::cout; using std::endl;

template<class T,int N>
int size(T (&)[N]) {
    return N;
}

int main () {
    int a[] = {3,4,5,6};
    
    // 配列aの要素数を表示
    cout << size(a) << endl;
    
    return 0;
}
$ main
4

配列の参照渡しをした場合、コンパイルが通るようにインスタンス化されるため型推論によってNに自動的に要素数が格納されるのでそれをreturnで返すというわけです。

なんか凄いですね。