title: std::wstring VS std::string
body: <p>I am not able to understand the differences between <code>std::string</code> and <code>std::wstring</code>. I know <code>wstring</code> supports wide characters such as Unicode characters. I have got the following questions:</p>
  
  <ol>
  <li>When should I use <code>std::wstring</code> over <code>std::string</code>?</li>
  <li>Can <code>std::string</code> hold the entire ASCII character set, including the special characters?</li>
  <li>Is <code>std::wstring</code> supported by all popular C++ compilers?</li>
  <li>What is exactly a "<em>wide character</em>"?</li>
  </ol>