[Interest] Weird error using Visual C++ 2013

Yves Bailly yves.bailly at sescoi.fr
Tue Mar 4 15:04:13 CET 2014


Greetings all,

Here's a strange crash I'm getting using Visual C++ 2013.
I compiled myself Qt 5.2.1 (64bits), "designer" and others work fine,
as well as all the examples and other programs I've tried.

Please consider this code:
--8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<---
class S
{
   public:
     S(QString const& name_):
       l_name(name_)
     { }
     QString const& name() const { return this->l_name; }

   private:
     QString l_name;
}; // S
int main(int argc, char* argv[])
{
   std::vector<S> vs
   {
       {"patam"},
       {"fo_"},
       {"kik_1"},
       {"kik_n"},
       {"kliton"},
       {"wu-harr"}
   };
   for(S const& l: vs)
   {
     qDebug() << l.name();
   }
   return 0;
}
--8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<---

Sometimes this code crashes, sometimes it doesn't, in every cases it prints garbage.

If I replace "QString" by "std::string", it works fine.
If I store directly "QString"s in the vector, it works fine.
If I fill the vector like this:

--8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<---
   S ts[] =
   {
       {"patam"},
       {"fo_"},
       {"kik_1"},
       {"kik_n"},
       {"kliton"},
       {"wu-harr"}
   };
   std::vector<S> vs;
   for(S const& l: ts)
   {
     vs.emplace_back(l.name());
   }
--8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<---

...then it works fine.

When trying GCC, either on Linux or using MinGW, it works fine.

Any hint about what may happen? is it a compiler bug, or something else?
Any idea about a workaround?

Thanks in advance for any idea :-)

-- 
      /- Yves Bailly - Software developer   -\
      \- Sescoi R&D  - http://www.sescoi.fr -/
"The possible is done. The impossible is being done. For miracles,
thanks to allow a little delay."



More information about the Interest mailing list