Your code is completely wrong, and if you read thread a liitle further , it will tell why.
in your case std::fill will try to assign 0 to array[0] through array[15] overwriting some memory it does not own and breaking your program. I am sure that if you will replace 0 with 1 in fill, you will probably get 1 as second sizeof.
What is wrong with canonical std::fill(std::begin(array), std::end(array), 0); which will also have a benefit of failing in compile time if array size cannot be known (like when array decayed to pointer)