https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64867
--- Comment #4 from Tom Tromey <tromey at gcc dot gnu.org> --- Thanks, I'll give it a try. Here's my test case FWIW and a short demo showing what clang does: pokyo. cat q.cc #include <stdarg.h> class ConstUTF8CharsZ { const char *mData; public: ConstUTF8CharsZ() : mData(0) { } explicit ConstUTF8CharsZ(const char *aBytes) : mData(aBytes) { } const void *get() const { return mData; } const char *c_str() const { return mData; } operator bool() const { return mData != 0; } }; void zzz(const char *x, ...) { } void m(const char *m) { ConstUTF8CharsZ cu(m); zzz(m, cu); } pokyo. clang++ q.cc q.cc:30:10: error: cannot pass object of non-POD type 'ConstUTF8CharsZ' through variadic function; call will abort at runtime [-Wnon-pod-varargs] zzz(m, cu); ^ 1 error generated.