https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81514
--- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
I'm able to reproduce this on Linux by replacing:
#include <stdio.h>
with:
namespace std
{
extern int sprintf (char *dst, const char *format, ...);
};
On Linux, the include of stdio.h seems to have been effectively doing this
(amongst many other things):
extern int sprintf (char *dst, const char *format, ...);
namespace std
{
using ::sprintf;
};
and this gets rejected in consider_binding_level by this clause:
/* Skip anticipated decls of builtin functions. */
if (TREE_CODE (d) == FUNCTION_DECL
&& DECL_BUILT_IN (d)
&& DECL_ANTICIPATED (d))
{
Presumably Solaris' headers doing something like the other thing above.
Am working on a fix.