Tabulate code calls std::locale::global in several places. std::locale::global is not thread-safe and makes tabulate unsafe to use inside a larger multithreaded application.
An application might change the locale at any time and conflict with tabulate calls to std::locale::global.
This is not a theoretical issue, I actually experienced application crashes until I removed all std::locale::global calls from tabulate.
I suggest removing all calls to std::locale::global and either pass locale directly to functions that accept locale as an argument, or use imbue to configure a stream to a locale.
Tabulate code calls
std::locale::global
in several places.std::locale::global
is not thread-safe and makes tabulate unsafe to use inside a larger multithreaded application.An application might change the locale at any time and conflict with tabulate calls to
std::locale::global
.This is not a theoretical issue, I actually experienced application crashes until I removed all
std::locale::global
calls from tabulate.I suggest removing all calls to
std::locale::global
and either pass locale directly to functions that accept locale as an argument, or useimbue
to configure a stream to a locale.