benchmark
1.8.3
Loading...
Searching...
No Matches
src
arraysize.h
1
#ifndef BENCHMARK_ARRAYSIZE_H_
2
#define BENCHMARK_ARRAYSIZE_H_
3
4
#include "internal_macros.h"
5
6
namespace
benchmark {
7
namespace
internal {
8
// The arraysize(arr) macro returns the # of elements in an array arr.
9
// The expression is a compile-time constant, and therefore can be
10
// used in defining new arrays, for example. If you use arraysize on
11
// a pointer by mistake, you will get a compile-time error.
12
//
13
14
// This template function declaration is used in defining arraysize.
15
// Note that the function doesn't need an implementation, as we only
16
// use its type.
17
template
<
typename
T,
size_t
N>
18
char (&ArraySizeHelper(T (&array)[N]))[N];
19
20
// That gcc wants both of these prototypes seems mysterious. VC, for
21
// its part, can't decide which to use (another mystery). Matching of
22
// template overloads: the final frontier.
23
#ifndef COMPILER_MSVC
24
template
<
typename
T,
size_t
N>
25
char (&ArraySizeHelper(
const
T (&array)[N]))[N];
26
#endif
27
28
#define arraysize(array) (sizeof(::benchmark::internal::ArraySizeHelper(array)))
29
30
}
// end namespace internal
31
}
// end namespace benchmark
32
33
#endif
// BENCHMARK_ARRAYSIZE_H_
Generated by
1.9.8