The 22.locale.moneypunct test fails on MSVC (and ICC/Windows)
due to bug of the CRT or native API.

  The following program aborts on assert (tested on all
MSVC's on Windows XP 32 and 64 bit). This program fails
only for some locales. So it fails with locname = "Catalan_Spain.1252"
but succeeds with locname = "Russian_Russia.1251".

#include <clocale>
#include <cstring>
#include <cassert>
#include <cstdio>

int main(int argc, char* argv[])
    const char* locname = "Catalan_Spain.1252";

    std::setlocale (LC_ALL, "C");

    std::setlocale (LC_MONETARY, locname);
    const lconv* pconv = std::localeconv ();
    char curr = pconv->currency_symbol [0];

    std::setlocale (LC_ALL, "C");

    std::setlocale (LC_ALL, locname);
    pconv = std::localeconv ();
    char curr2 = pconv->currency_symbol [0];

    std::printf ("curr = %d\n", int (curr));
    std::printf ("curr2 = %d\n", int (curr2));

    assert (curr == curr2);

    return 0;

  The program output:
curr = -120
curr2 = -128
Assertion failed: curr == curr2, file
d:\_projects\locbug\locbug\locbug.cpp, line 29

This application has requested the Runtime to terminate it in an unusual
Please contact the application's support team for more information.


Reply via email to