- _M_decimal_point = L'.';
- _M_thousands_sep = L',';
- _M_grouping = "";
- _M_curr_symbol = L"";
- _M_positive_sign = L"";
- _M_negative_sign = L"";
- _M_frac_digits = 0;
- _M_pos_format = money_base::_S_default_pattern;
- _M_neg_format = money_base::_S_default_pattern;
+ if (!_M_data)
+ _M_data = new __moneypunct_cache<wchar_t, false>;
+
+ _M_data->_M_decimal_point = L'.';
+ _M_data->_M_thousands_sep = L',';
+ _M_data->_M_grouping = "";
+ _M_data->_M_grouping_size = 0;
+ _M_data->_M_curr_symbol = L"";
+ _M_data->_M_curr_symbol_size = 0;
+ _M_data->_M_positive_sign = L"";
+ _M_data->_M_positive_sign_size = 0;
+ _M_data->_M_negative_sign = L"";
+ _M_data->_M_negative_sign_size = 0;
+ _M_data->_M_frac_digits = 0;
+ _M_data->_M_pos_format = money_base::_S_default_pattern;
+ _M_data->_M_neg_format = money_base::_S_default_pattern;
+
+ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
+ _M_data->_M_atoms[__i] =
+ static_cast<wchar_t>(money_base::_S_atoms[__i]);