<code> #include <string> #include <cstdio> int main() { std::string s("Hello World"); printf("%s\n", s); return 0; } </code>
$ /usr/local/gcc343/bin/g++ nonPODWarn.cc nonPODWarn.cc: In function `int main()': nonPODWarn.cc:6: warning: cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime This warning should IMHO really be turned into an error. The diagnostic ends with "... call will abort at runtime", which sounds pretty severe to me! $ /usr/local/gcc343/bin/g++ -v -save-temps nonPODWarn.cc Reading specs from /usr/local/gcc343/lib/gcc/i686-pc-linux-gnu/3.4.3/specs Configured with: ../gcc-3.4.3/configure --prefix=/usr/local/gcc343 --enable- threads=posix Thread model: posix gcc version 3.4.3 /usr/local/gcc343/libexec/gcc/i686-pc-linux-gnu/3.4.3/cc1plus -E -quiet -v - D_GNU_SOURCE nonPODWarn.cc -mtune=pentiumpro -o nonPODWarn.ii ignoring nonexistent directory "/usr/local/gcc343/lib/gcc/i686-pc-linux- gnu/3.4.3/../../../../i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/local/gcc343/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../include/c++/3.4.3 /usr/local/gcc343/lib/gcc/i686-pc-linux- gnu/3.4.3/../../../../include/c++/3.4.3/i686-pc-linux-gnu /usr/local/gcc343/lib/gcc/i686-pc-linux- gnu/3.4.3/../../../../include/c++/3.4.3/backward /usr/local/include /usr/local/gcc343/include /usr/local/gcc343/lib/gcc/i686-pc-linux-gnu/3.4.3/include /usr/include End of search list. /usr/local/gcc343/libexec/gcc/i686-pc-linux-gnu/3.4.3/cc1plus -fpreprocessed nonPODWarn.ii -quiet -dumpbase nonPODWarn.cc -mtune=pentiumpro -auxbase nonPODWarn -version -o nonPODWarn.s GNU C++ version 3.4.3 (i686-pc-linux-gnu) compiled by GNU C version 3.4.3. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 nonPODWarn.cc: In function `int main()': nonPODWarn.cc:6: warning: cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime as -V -Qy -o nonPODWarn.o nonPODWarn.s GNU assembler version 2.13.90.0.18 (i386-redhat-linux) using BFD version 2.13.90.0.18 20030206 /usr/local/gcc343/libexec/gcc/i686-pc-linux-gnu/3.4.3/collect2 --eh-frame-hdr - m elf_i386 -dynamic-linker /lib/ld- linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /usr/local/gcc343/lib/gcc/i686-pc- linux-gnu/3.4.3/crtbegin.o -L/usr/local/gcc343/lib/gcc/i686-pc-linux-gnu/3.4.3 - L/usr/local/gcc343/lib/gcc/i686-pc-linux-gnu/3.4.3/../../.. nonPODWarn.o - lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/local/gcc343/lib/gcc/i686-pc- linux-gnu/3.4.3/crtend.o /usr/lib/crtn.o -- Summary: Warning "cannot pass objects of non-POD type" should be an error Product: gcc Version: 3.4.3 Status: UNCONFIRMED Severity: enhancement Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: loose at astron dot nl CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19291