https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64867
--- Comment #3 from Jason Merrill <jason at gcc dot gnu.org> --- Passing a non-POD to a varargs function is conditionally-supported, with implementation-defined semantics. In GCC 5 it's supported and treated like normal pass-by-value. You can get a diagnostic about it with -Wconditionally-supported.