Index: third_party/google_benchmark/src/arraysize.h |
diff --git a/third_party/google_benchmark/src/arraysize.h b/third_party/google_benchmark/src/arraysize.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..51a50f2dff271a01b57bc280404bfeab0ed1ab4c |
--- /dev/null |
+++ b/third_party/google_benchmark/src/arraysize.h |
@@ -0,0 +1,33 @@ |
+#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) (sizeof(::benchmark::internal::ArraySizeHelper(array))) |
+ |
+} // end namespace internal |
+} // end namespace benchmark |
+ |
+#endif // BENCHMARK_ARRAYSIZE_H_ |