diff --git a/cppwinrt/code_writers.h b/cppwinrt/code_writers.h index c986c927f..e0162fe45 100644 --- a/cppwinrt/code_writers.h +++ b/cppwinrt/code_writers.h @@ -3253,6 +3253,7 @@ struct WINRT_IMPL_EMPTY_BASES produce_dispatch_to_overridable w.write(strings::base_reference_produce); w.write(strings::base_deferral); w.write(strings::base_coroutine_foundation); + w.write(strings::base_stringable_to_hstring); w.write(strings::base_stringable_format); w.write(strings::base_stringable_streams); } diff --git a/cppwinrt/cppwinrt.vcxproj b/cppwinrt/cppwinrt.vcxproj index 75d8cee1e..f0d1e5706 100644 --- a/cppwinrt/cppwinrt.vcxproj +++ b/cppwinrt/cppwinrt.vcxproj @@ -81,6 +81,7 @@ + diff --git a/cppwinrt/cppwinrt.vcxproj.filters b/cppwinrt/cppwinrt.vcxproj.filters index 01aecb75e..96129ab20 100644 --- a/cppwinrt/cppwinrt.vcxproj.filters +++ b/cppwinrt/cppwinrt.vcxproj.filters @@ -169,7 +169,7 @@ strings - + strings @@ -184,6 +184,9 @@ strings + + strings + diff --git a/strings/base_stringable_to_hstring.h b/strings/base_stringable_to_hstring.h new file mode 100644 index 000000000..f92da965b --- /dev/null +++ b/strings/base_stringable_to_hstring.h @@ -0,0 +1,8 @@ + +WINRT_EXPORT namespace winrt +{ + inline hstring to_hstring(Windows::Foundation::IStringable const& stringable) + { + return stringable.ToString(); + } +} diff --git a/test/old_tests/UnitTests/to_hstring.cpp b/test/old_tests/UnitTests/to_hstring.cpp index 9f3463a56..1d287c09b 100644 --- a/test/old_tests/UnitTests/to_hstring.cpp +++ b/test/old_tests/UnitTests/to_hstring.cpp @@ -4,6 +4,14 @@ using namespace winrt; +struct stringable : winrt::implements +{ + winrt::hstring ToString() + { + return L"a stringable object"; + } +}; + namespace { void test_cases() @@ -82,6 +90,10 @@ namespace hstring const c = to_hstring(b); REQUIRE(a == c); } + { + auto const obj = make(); + REQUIRE(to_hstring(obj) == obj.ToString()); + } } }