のVisual C++ 10は、とりわけこの宝石が含まれていSTDLIB.Hが同梱されています:a clever template trick to deduce array sizeとが__countof
に渡されるのポインタを防ぐ使用この「要素数」マクロのダミー加算の目的は何ですか?
template <typename _CountofType, size_t _SizeOfArray>
char (*__countof_helper(UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
#define _countof(_Array) (sizeof(*__countof_helper(_Array)) + 0)
。
+ 0
のマクロ定義の目的は何ですか?どのような問題が解決しますか?
[PSコメントとしてこれを考慮してください]私が考えることができるのは、それをテンプレートの特殊化で使用できないようにすることだけです。しかしそれは限界だ。 – Pubby
もちろん、VS2010が 'constexpr'をサポートしていれば、' template constexpr size_t size(T(&)[N]){return N; } ' –