constexpr initlist_construct_t initlist_construct{};
/**
- * A generic tag type to indicate that some constructor or method is in some way
- * unsafe and should be used only with extreme care and with full test coverage,
- * if ever.
+ * A generic tag type to indicate that some constructor or method accepts a
+ * presorted container.
*
* Example:
*
* void takes_numbers(std::vector<int> alist) {
* std::sort(alist.begin(), alist.end());
- * takes_numbers_assume_sorted(folly::unsafe, alist);
+ * takes_numbers_assume_sorted(folly::presorted, alist);
* }
*
- * void takes_numbers_assume_sorted(folly::unsafe_t, std::vector<int> alist) {
+ * void takes_numbers(folly::presorted_t, std::vector<int> alist) {
* assert(std::is_sorted(alist.begin(), alist.end())); // debug mode only
* for (i : alist) {
* // some behavior which is defined and safe only when alist is sorted ...
* }
* }
*/
-struct unsafe_t {};
-constexpr unsafe_t unsafe{};
+struct presorted_t {};
+constexpr presorted_t presorted{};
/**
* A simple function object that passes its argument through unchanged.
Container&& container,
const Compare& comp = Compare())
: sorted_vector_set(
- unsafe,
+ presorted,
detail::as_sorted(std::move(container), comp),
comp) {}
// Construct a sorted_vector_set by stealing the storage of a prefilled
- // container. The container must be sorted, as unsafe_t hints. This supports
+ // container. The container must be sorted, as presorted_t hints. Supports
// bulk construction of sorted_vector_set with zero allocations, not counting
// those performed by the caller. (The iterator range constructor performs at
// least one allocation).
//
- // Note that `sorted_vector_set(unsafe_t, const Container& container)` is not
- // provided, since the purpose of this constructor is to avoid an unnecessary
+ // Note that `sorted_vector_set(presorted_t, const Container& container)` is
+ // not provided, since the purpose of this constructor is to avoid an extra
// copy.
sorted_vector_set(
- unsafe_t,
+ presorted_t,
Container&& container,
const Compare& comp = Compare())
: m_(comp, container.get_allocator()) {
Container&& container,
const Compare& comp = Compare())
: sorted_vector_map(
- unsafe,
+ presorted,
detail::as_sorted(std::move(container), value_compare(comp)),
comp) {}
// Construct a sorted_vector_map by stealing the storage of a prefilled
- // container. The container must be sorted, as unsafe_t hints. This supports
+ // container. The container must be sorted, as presorted_t hints. S supports
// bulk construction of sorted_vector_map with zero allocations, not counting
// those performed by the caller. (The iterator range constructor performs at
// least one allocation).
//
- // Note that `sorted_vector_map(unsafe_t, const Container& container)` is not
- // provided, since the purpose of this constructor is to avoid an unnecessary
+ // Note that `sorted_vector_map(presorted_t, const Container& container)` is
+ // not provided, since the purpose of this constructor is to avoid an extra
// copy.
sorted_vector_map(
- unsafe_t,
+ presorted_t,
Container&& container,
const Compare& comp = Compare())
: m_(value_compare(comp), container.get_allocator()) {