#ifndef BENCHMARK_ARRAYSIZE_H_ #define BENCHMARK_ARRAYSIZE_H_ #include "internal_macros.h" namespace benchmark { namespace internal { // The arraysize(arr) macro returns the # of elements in an array arr. // The expression is a compile-time constant, and therefore can be // used in defining new arrays, for example. If you use arraysize on // a pointer by mistake, you will get a compile-time error. // // This template function declaration is used in defining arraysize. // Note that the function doesn't need an implementation, as we only // use its type. template <typename T, size_t N> char (&ArraySizeHelper(T (&array)[N]))[N]; // That gcc wants both of these prototypes seems mysterious. VC, for // its part, can't decide which to use (another mystery). Matching of // template overloads: the final frontier. #ifndef COMPILER_MSVC template <typename T, size_t N> char (&ArraySizeHelper(const T (&array)[N]))[N]; #endif #define arraysize(array) … } // end namespace internal } // end namespace benchmark #endif // BENCHMARK_ARRAYSIZE_H_