From 68c45ee5bb9c998923f7a8ce7857128803dbe93a Mon Sep 17 00:00:00 2001
From: Egor Tensin <Egor.Tensin@gmail.com>
Date: Mon, 27 Sep 2021 16:44:30 +0300
Subject: add a std::u16string overload

---
 include/winapi/utf8.hpp | 6 ++++++
 src/convert.cpp         | 4 ++++
 2 files changed, 10 insertions(+)

diff --git a/include/winapi/utf8.hpp b/include/winapi/utf8.hpp
index 9259df6..c6bb03a 100644
--- a/include/winapi/utf8.hpp
+++ b/include/winapi/utf8.hpp
@@ -17,6 +17,9 @@
 
 namespace winapi {
 
+/* sizeof(wchar_t) == 4 on Linux, we don't care about that. */
+static_assert(sizeof(wchar_t) == 2, "This is Windows, right?");
+
 /** Convert UTF-8 string to UTF-16. */
 std::wstring widen(const std::string&);
 
@@ -39,6 +42,9 @@ std::wstring widen(const std::vector<T, Alloc>& src) {
 /** Convert UTF-16 string to UTF-8. */
 std::string narrow(const std::wstring&);
 
+/** Convert UTF-16 string to UTF-8. */
+std::string narrow(const std::u16string&);
+
 /**
  * Convert UTF-16 string to UTF-8.
  * \param src Memory address of a UTF-16 string.
diff --git a/src/convert.cpp b/src/convert.cpp
index bacea60..4ccc3a0 100644
--- a/src/convert.cpp
+++ b/src/convert.cpp
@@ -130,6 +130,10 @@ std::string narrow(const std::wstring& src) {
     return narrow(src.c_str(), src.size() * sizeof(std::wstring::value_type));
 }
 
+std::string narrow(const std::u16string& src) {
+    return narrow(src.c_str(), src.size() * sizeof(std::u16string::value_type));
+}
+
 std::string narrow(const void* src, std::size_t in_nb) {
     const DWORD flags = WC_ERR_INVALID_CHARS;
 
-- 
cgit v1.2.3