The Solaris headers think that when included by a C++ compiler they
should define those overloads. The libstdc++ headers think that the C
library won't provide them, so it provides them. Neither is "wrong"
it's just a mistaken assumption.
IMHO the right fix would be for libstdc++ to be aware that it's got a
cooperative C library that want to help and provide some of those
overloads. I believe the original libstdc++ design was that one of
the libstdc++-v3/include/c_* directories would contain headers
designed to work with a cooperative C library, but I don't know what
the status of those directories is.