Salve ho questo problema con la conversione da char* in wchar_t.
Su linux io scrivo in questo modo e funziona:

codice:
  locale newlocale1("");
  locale newlocale2(locale::classic(), newlocale1, locale::ctype);
  locale::global(newlocale2);

  wchar_t val;
  char tmpval[] = "§";
  wchar_t  WcharString[255];
  mbstowcs(WcharString, tmpval, strlen(tmpval));
  val = WcharString[0]; 

  cout << val;
Su linux la variabile "val" mi restituisce 167 e va bene mentre su windows trovo tre caratteri in WcharString e 167 si trova nel secondo carattere.
Dentro WcharString dovrei trovare solo un singolo carattere 167 che corrisponde a § ma questo non accade.

Su linux se non setto il locale a utf8 la funzione mbstowcs non fa il suo dovere e in questo momento ho notato che


codice:
  locale newlocale1("");
  locale newlocale2(locale::classic(), newlocale1, locale::ctype);
  locale::global(newlocale2);
non fa assolutamente nulla su windows,mentre se lo scrivo in C

codice:
  char * local = setlocale (LC_ALL, "");
  cout << local; //Italian_Italy.1252
il locale è Italian_Italy.1252 che non è utf8.

A me interessa avere il risultato che ho su linux e cioè 167.

Qualche idea?