Tech Off Post

Single Post Permalink

View Thread: template countof confusion-question
  • User profile image
    Mr Crash

    These do the same thing (as far as i know) but which one is more correct ?

     

    Are there any pros and cons, etc ?

    Are there any differences at all that is noteworthy ?

     

    ---------------------------------------------------------------------------------------------------

    From: stdlib.h

     

     

    extern "C++" { template <typename _CountofType, size_t _SizeOfArray> char (*__countof_helper(UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray]; #define _countof(_Array) (sizeof(*__countof_helper(_Array)) + 0) }

     

     

    Question: Why "+ 0" ? To prevent compiler bug ?

    ---------------------------------------------------------------------------------------------------

    From: WinNT.h (Microsoft SDK)

     

     

    extern "C++" // templates cannot be declared to have 'C' linkage template <typename T, size_t N> char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N]; #define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A)))

     

     

    This is the same as the one above but without the strange "+ 0".

     

    ---------------------------------------------------------------------------------------------------

    From: WSPiApi.h (Microsoft SDK)

     

     

    template <typename __CountofType, size_t _N> char (&__wspiapi_countof_helper(__CountofType (&_Array)[_N]))[_N]; #define _WSPIAPI_COUNTOF(_Array) sizeof(__wspiapi_countof_helper(_Array))

     

    ---------------------------------------------------------------------------------------------------

     

    So the main question would be: pointer vs reference, pros and cons anyone know ?