Visual C++ 10 se envía con stdlib.h que entre otras cosas contiene esta joya:¿Cuál es el propósito de la adición ficticia en esta macro de "número de elementos"?
template <typename _CountofType, size_t _SizeOfArray>
char (*__countof_helper(UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
#define _countof(_Array) (sizeof(*__countof_helper(_Array)) + 0)
el cual utiliza a clever template trick to deduce array size y evitar punteros de ser pasado a __countof
.
¿Cuál es el propósito de + 0
en la definición de macro? ¿Qué problema soluciona?
El lo único que se me ocurre es evitar que se pueda usar en especializaciones de plantilla. Sin embargo, eso es una limitación. – Pubby
Por supuesto, si VS2010 admite 'constexpr', entonces sería:' template constexpr size_t size (T (&) [N]) {return N; } ' –