File tree Expand file tree Collapse file tree 1 file changed +22
-0
lines changed
Expand file tree Collapse file tree 1 file changed +22
-0
lines changed Original file line number Diff line number Diff line change @@ -404,6 +404,22 @@ nssv_DISABLE_MSVC_WARNINGS( 4455 26481 26472 )
404404
405405namespace nonstd { namespace sv_lite {
406406
407+ #if nssv_CPP11_OR_GREATER
408+
409+ namespace detail {
410+
411+ // Expect tail call optimization to make length() non-recursive:
412+
413+ template < typename CharT >
414+ inline constexpr std::size_t length ( CharT * s, std::size_t result = 0 )
415+ {
416+ return *s == ' \0 ' ? result : length ( s + 1 , result + 1 );
417+ }
418+
419+ } // namespace detail
420+
421+ #endif // nssv_CPP11_OR_GREATER
422+
407423template
408424<
409425 class CharT ,
@@ -464,7 +480,13 @@ class basic_string_view
464480
465481 nssv_constexpr basic_string_view ( CharT const * s) nssv_noexcept // non-standard noexcept
466482 : data_( s )
483+ #if nssv_CPP17_OR_GREATER
467484 , size_( Traits::length(s) )
485+ #elif nssv_CPP11_OR_GREATER
486+ , size_( detail::length(s) )
487+ #else
488+ , size_( Traits::length(s) )
489+ #endif
468490 {}
469491
470492 // Assignment:
You can’t perform that action at this time.
0 commit comments