#include <iostream>
#include <string>
#include <sstream> /// istringstream
using namespace std;
template<typename S>
void StreamLocaleName(S& s,
string m)
{
/// Get the stream's locale.
locale loc = s.rdbuf()->getloc();
/// Display locale name.
cout << m << "'s locale: "
<< loc.name() << endl;
}
int main()
{
string s {};
istringstream iss {s};
/// Display the istringstream's initial locale name.
StreamLocaleName(iss, "iss");
/// Set the istringstream's locale to POSIX
locale posix {"POSIX"};
iss.imbue(posix);
/// Display the istringstream's new locale name.
StreamLocaleName(iss, "iss");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4gICAgICAvLy8gaXN0cmluZ3N0cmVhbQoKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKdGVtcGxhdGU8dHlwZW5hbWUgUz4Kdm9pZCBTdHJlYW1Mb2NhbGVOYW1lKFMmIHMsCiAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgbSkKewogICAgLy8vIEdldCB0aGUgc3RyZWFtJ3MgbG9jYWxlLgogICAgbG9jYWxlIGxvYyA9IHMucmRidWYoKS0+Z2V0bG9jKCk7CgogICAgLy8vIERpc3BsYXkgbG9jYWxlIG5hbWUuCiAgICBjb3V0IDw8IG0gPDwgIidzIGxvY2FsZTogIgogICAgICAgICA8PCBsb2MubmFtZSgpIDw8IGVuZGw7Cn0KCgppbnQgbWFpbigpCnsKICAgc3RyaW5nIHMge307CiAgIGlzdHJpbmdzdHJlYW0gaXNzIHtzfTsKCiAgIC8vLyBEaXNwbGF5IHRoZSBpc3RyaW5nc3RyZWFtJ3MgaW5pdGlhbCBsb2NhbGUgbmFtZS4KICAgU3RyZWFtTG9jYWxlTmFtZShpc3MsICJpc3MiKTsKCiAgIC8vLyBTZXQgdGhlIGlzdHJpbmdzdHJlYW0ncyBsb2NhbGUgdG8gUE9TSVgKICAgbG9jYWxlIHBvc2l4IHsiUE9TSVgifTsKICAgaXNzLmltYnVlKHBvc2l4KTsKCiAgIC8vLyBEaXNwbGF5IHRoZSBpc3RyaW5nc3RyZWFtJ3MgbmV3IGxvY2FsZSBuYW1lLgogICBTdHJlYW1Mb2NhbGVOYW1lKGlzcywgImlzcyIpOwp9