Печать std::string через printf() в Visual Studio

В ходе нескольких code review уже неоднократно встречаю вот такое:

#include <string>
#include <cstdio>

int main() {
  std::string s = "12345678";
  std::printf("[%s]\n", s);
}

Явная опечатка с пропущеным вызовом s.c_str(). Но странно, что Студия, даже с /Wall не дает никакого предупрежнения, и более того – код не падает. Но вот gcc предупреждает:

warning: cannot pass objects of non-POD type 'struct std::string' through '...'; call will abort at runtime

и программа при запуске благополучно падает с Illegal instruction.

Неужели в Студии специально сделали, что работал такое глюк просто потому, что это слишком распространенная опечатка?


Disclaimer

Комментарии