// for native array template < class Ty, std::size_t size > constexpr std::size_t lengthof( Ty(&)[size] ) noexcept { return size; } // for std::array template < class Ty, std::size_t size > constexpr std::size_t lengthof( const std::array < Ty, size >& arg ) noexcept { return size; } int main() { int something[16] = {}; lengthof( something ); // 16 std::array < int, 32 > something = {}; lengthof(