After the call, the construction of locale objects with its default constructor return a copy of loc.

If loc has a name, the function also sets the C global locale (as if the C library function setlocale was called with LC_ALL), affecting all locale-dependent functions of the C library.
If loc has no name ("*"), the effect on the C global locale depends on the library implementation.

Note that the C++ global locale is always changed to loc by this function, no matter its name. Therefore, if loc has no name, it may cause the C++ global locale (the one used by locale-dependent functions of the C library) to be different from the C++ global locale (the one constructed by default).

Whether a single global locale exists for the entire program, or one for each thread, depends on the library implementation.

Data races

On library implementations that do not maintain a per-thread global locale, the call may introduce data races with concurrent calls to the same function.
Additionally, if the function uses setlocale internally, it may also introduce data races with concurrent calls to the C function setlocale and with any C functions affected by it.