| 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. | |
| template <typename T, size_t N> | |
| char (&ArraySizeHelper(const T (&array)[N]))[N]; | |
| } // end namespace internal | |
| } // end namespace benchmark | |