19namespace CppSpec::Util {
29inline std::string
demangle(
const char* mangled) {
31 std::unique_ptr<
char[], void (*)(
void*)> result{
32 abi::__cxa_demangle(mangled,
nullptr,
nullptr, &status),
35 return (status == 0) ? result.get() : mangled;
48 static_assert(result,
"Assertion failed (see below for more information)");
49 static bool const value = result;
66 requires std::ranges::range<C>;
67 { c.max_size() } -> std::integral;
68 { c.empty() } -> std::convertible_to<bool>;
82 { os << obj } -> std::same_as<std::ostream&>;
89 std::is_function_v<C> ||
93 std::is_convertible_v<C, std::function<void()>> ||
98 requires std::is_object_v<C>;
99 { func() } -> std::invocable<>;
106concept not_c_string = !std::is_same_v<T, const char*> && !std::is_same_v<T, char*> &&
107 !std::is_convertible_v<T, const char*> && !std::is_convertible_v<T, char*>;
119[[nodiscard]]
inline std::string
join(std::ranges::range
auto& iterable,
const std::string& separator =
"") {
120 std::ostringstream oss;
122 for (
auto& thing : iterable) {
132[[nodiscard]]
inline std::string join_endl(std::ranges::range
auto&& iterable) {
133 std::ostringstream oss;
135 for (
auto& thing : iterable) {
Concept for checking whether T is a container type.
Definition util.hpp:65
Checks whether T can be streamed.
Definition util.hpp:81
Helper class for static assertions that has a built-in error string.
Definition util.hpp:47
std::string demangle(const char *name)
Definition util.hpp:38
std::string join(std::ranges::range auto &iterable, const std::string &separator="")
Implode a string.
Definition util.hpp:119