diff options
author | Neil MacIntosh <neilmac@microsoft.com> | 2016-09-04 14:12:40 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-09-04 14:12:40 -0700 |
commit | a360b81805845ce52a77095f5547a1eb2e261efd (patch) | |
tree | bdb9946c87c47358da93d9acda6c560d2f5a8a19 | |
parent | f8ef4e235531193ef31021958320bcf6dd4775a0 (diff) | |
parent | ec109d2374a6fe949b9760c5f55869119072f083 (diff) | |
download | platform_external_Microsoft-GSL-a360b81805845ce52a77095f5547a1eb2e261efd.tar.gz platform_external_Microsoft-GSL-a360b81805845ce52a77095f5547a1eb2e261efd.tar.bz2 platform_external_Microsoft-GSL-a360b81805845ce52a77095f5547a1eb2e261efd.zip |
Fix #247: add to_basic_string().
Add to_basic_string
-rw-r--r-- | gsl/string_span | 10 | ||||
-rw-r--r-- | tests/string_span_tests.cpp | 12 |
2 files changed, 22 insertions, 0 deletions
diff --git a/gsl/string_span b/gsl/string_span index 8e60183..cd49998 100644 --- a/gsl/string_span +++ b/gsl/string_span @@ -486,6 +486,16 @@ inline std::wstring to_string(wstring_span<> view) #endif +template <typename CharT, + typename Traits = typename std::char_traits<CharT>, + typename Allocator = std::allocator<CharT>, + typename gCharT, + std::ptrdiff_t Extent> +std::basic_string<CharT, Traits, Allocator> to_basic_string(basic_string_span<gCharT, Extent> view) +{ + return {view.data(), static_cast<size_t>(view.length())}; +} + // zero-terminated string span, used to convert // zero-terminated spans to legacy strings template <typename CharT, std::ptrdiff_t Extent = dynamic_extent> diff --git a/tests/string_span_tests.cpp b/tests/string_span_tests.cpp index 7e623f3..a1cfe79 100644 --- a/tests/string_span_tests.cpp +++ b/tests/string_span_tests.cpp @@ -114,6 +114,18 @@ SUITE(string_span_tests) CHECK(s2.length() == 5); } + TEST(TestToBasicString) + { + auto s = gsl::to_basic_string<char,std::char_traits<char>,::std::allocator<char>>(cstring_span<>{}); + CHECK(s.length() == 0); + + char stack_string[] = "Hello"; + cstring_span<> v = ensure_z(stack_string); + auto s2 = gsl::to_basic_string<char,std::char_traits<char>,::std::allocator<char>>(v); + CHECK(static_cast<cstring_span<>::index_type>(s2.length()) == v.length()); + CHECK(s2.length() == 5); + } + TEST(EqualityAndImplicitConstructors) { { |