MSVC apparently thinks that the result of arithmetic promotions
on an `unsigned:4` bitfield is `unsigned`, not `int`; which then
causes it to fail to deduce whether the `T` in `min<T>` should be
`unsigned` (the type of the LHS) or `int` (the type of the RHS).
Clang and GCC agree that the result of arithmetic promotions on
an `unsigned:4` bitfield should be `int`, so they don't see any
ambiguity here.
Eliminate a format-string warning by using less template magic:
https://stackoverflow.com/questions/12573968/how-to-use-gccs-printf-format-attribute-with-c11-variadic-templates
Fix one `%Ld` in `rogueviz.cpp` that should have been `%lld`.
Rename `savepng.c` into `savepng.cpp` so that we don't have to care about
the system's C compiler; it builds fine using the same C++ options as
HyperRogue itself.
Figure out how to get `-DCAP_PNG` and `-DCAP_ROGUEVIZ` working on Mac,
and document them.
Assume that roughly the same things should also work on MinGW.
Consistency on `STDSIZE`, even though it doesn't suffice for C++17 conformance.
It *almost* suffices; the one place where Clang still complains even with
`-std=c++17 -DSTDSIZE -Wno-sign-compare` is here:
./fieldpattern.cpp:757:51: error: non-constant-expression cannot be narrowed from type 'unsigned long' to 'int' in initializer list
[-Wc++11-narrowing]
ex.primes.emplace_back(primeinfo{nextprime, size(fp.matrices) / S7, (bool) fp.wsquare});
^~~~~~~~~~~~~~~~~~~~~~
So, we fix that up too, in this patch.