Skip to content

Commit

Permalink
make string_view(const char*) constructor constexpr only in C++17 and…
Browse files Browse the repository at this point in the history
… later (#4774)
  • Loading branch information
t3nsor authored and GitHub Enterprise committed Jun 3, 2024
1 parent 1f74743 commit e7da859
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 10 deletions.
11 changes: 9 additions & 2 deletions groups/bsl/bslstl/bslstl_stringview.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,12 @@ BSLS_IDENT("$Id: $")
#define BSLSTL_STRING_VIEW_AND_STD_STRING_VIEW_COEXIST
#endif

#if defined(BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY)
#define BSLSTL_STRING_VIEW_CHAR_TRAITS_LENGTH_CONSTEXPR constexpr
#else
#define BSLSTL_STRING_VIEW_CHAR_TRAITS_LENGTH_CONSTEXPR
#endif

// 'BDE_DISABLE_CPP17_ABI' is intended for CI builds only, to allow simulation
// of Sun/AIX builds on Linux hosts. It is an error to define this symbol in
// Bloomberg production builds.
Expand Down Expand Up @@ -446,7 +452,7 @@ class basic_string_view {
// Create a view that has the same value as the specified 'original'
// object.

BSLS_KEYWORD_CONSTEXPR_CPP14
BSLSTL_STRING_VIEW_CHAR_TRAITS_LENGTH_CONSTEXPR
basic_string_view(const CHAR_TYPE *characterString); // IMPLICIT
// Create a view of the specified null-terminated 'characterString' (of
// length 'CHAR_TRAITS::length(characterString)').
Expand Down Expand Up @@ -1424,7 +1430,7 @@ basic_string_view<CHAR_TYPE,CHAR_TRAITS>::basic_string_view()

template <class CHAR_TYPE, class CHAR_TRAITS>
BSLS_PLATFORM_AGGRESSIVE_INLINE
BSLS_KEYWORD_CONSTEXPR_CPP14
BSLSTL_STRING_VIEW_CHAR_TRAITS_LENGTH_CONSTEXPR
basic_string_view<CHAR_TYPE, CHAR_TRAITS>::basic_string_view(
const CHAR_TYPE *characterString)
: d_start_p(characterString)
Expand Down Expand Up @@ -2772,6 +2778,7 @@ void bslh::hashAppend(
} // close enterprise namespace
#endif // BSLSTL_STRING_VIEW_IS_ALIASED

#undef BSLSTL_STRING_VIEW_CHAR_TRAITS_LENGTH_CONSTEXPR
#undef BSLSTL_STRING_VIEW_AND_STD_STRING_VIEW_COEXIST

#endif
Expand Down
26 changes: 18 additions & 8 deletions groups/bsl/bslstl/bslstl_stringview.t.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// bslstl_stringview.t.cpp -*-C++-*-
#include <bslstl_stringview.h>

#include <bsla_maybeunused.h>

#include <bslstl_algorithm.h> // bsl::count()

#include <bslma_default.h>
Expand Down Expand Up @@ -1131,7 +1133,8 @@ void TestDriver<TYPE,TRAITS>::testCase25()
# ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
// check constexpr construction
constexpr std::string_view dummy1("0123456789");
constexpr bsl::string_view dummy2(dummy1);

BSLA_MAYBE_UNUSED constexpr bsl::string_view dummy2(dummy1);
# endif
#endif

Expand Down Expand Up @@ -5692,6 +5695,11 @@ void TestDriver<TYPE, TRAITS>::testCase8()
}
#endif

#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
// check constexpr construction
BSLA_MAYBE_UNUSED constexpr bsl::string_view dummy("0123456789");
#endif

// Verify no memory was ever allocated.
ASSERTV(da.numBlocksTotal(), 0 == da.numBlocksTotal());
}
Expand Down Expand Up @@ -6250,10 +6258,11 @@ void TestDriver<TYPE, TRAITS>::testCase5()
// Check that no additional memory has been allocated.
ASSERTV(da.numBytesTotal(), 0 == da.numBytesTotal());

#ifdef BSLS_COMPILERFEATURES_SUPPORT_CONSTEXPR_CPP14
// check constexpr construction
constexpr bsl::string_view dummy1("0123456789");
constexpr bsl::string_view dummy2(dummy1);
#ifdef BSLS_COMPILERFEATURES_SUPPORT_CONSTEXPR_CPP14
constexpr bsl::string_view dummy1("0123456789", 10);

BSLA_MAYBE_UNUSED constexpr bsl::string_view dummy2(dummy1);
#endif
}

Expand Down Expand Up @@ -6630,7 +6639,7 @@ void TestDriver<TYPE, TRAITS>::testCase2()
fa.deleteObject(objPtr);
}
#ifdef BSLS_COMPILERFEATURES_SUPPORT_CONSTEXPR
constexpr Obj dummy;
BSLA_MAYBE_UNUSED constexpr Obj dummy;
#endif
}

Expand Down Expand Up @@ -6681,9 +6690,10 @@ void TestDriver<TYPE, TRAITS>::testCase2()
}
#ifdef BSLS_COMPILERFEATURES_SUPPORT_CONSTEXPR_CPP14
// check constexpr construction
constexpr bsl::string_view dummy1("0123456789");
constexpr bsl::string_view dummy2("0123456789", 9);
constexpr bsl::string_view dummy3(dummy2.begin(), dummy2.end());
constexpr bsl::string_view dummy1("0123456789", 9);

BSLA_MAYBE_UNUSED constexpr bsl::string_view dummy2(dummy1.begin(),
dummy1.end());
#endif
}

Expand Down

0 comments on commit e7da859

Please sign in to comment.