#pragma once
#include <cstddef>
#include <type_traits>
#include <folly/Portability.h>
#include <folly/lang/CArray.h>
namespace folly {
namespace detail {
pretty_carray;
static constexpr char* pretty_carray_copy(
char* dest, const char* src, std::size_t n) { … }
template <std::size_t S>
static constexpr pretty_carray<S> pretty_carray_from(char const (&in)[S]) { … }
struct pretty_info { … };
template <typename To, std::size_t S>
static constexpr To pretty_info_to(pretty_info info, char const (&name)[S]) { … }
template <std::size_t S>
static constexpr std::size_t pretty_lfind(
char const (&haystack)[S], char const needle) { … }
template <std::size_t S>
static constexpr std::size_t pretty_rfind(
char const (&haystack)[S], char const needle) { … }
struct pretty_tag_msc { … };
struct pretty_tag_gcc { … };
pretty_default_tag;
template <typename T>
static constexpr auto pretty_raw(pretty_tag_msc) { … }
template <typename T>
static constexpr auto pretty_raw(pretty_tag_gcc) { … }
template <std::size_t S>
static constexpr pretty_info pretty_parse(
pretty_tag_msc, char const (&name)[S]) { … }
template <std::size_t S>
static constexpr pretty_info pretty_parse(
pretty_tag_gcc, char const (&name)[S]) { … }
template <typename T, typename Tag>
struct pretty_name_zarray { … };
template <typename T>
constexpr const auto& pretty_name_carray() { … }
}
template <typename T>
constexpr char const* pretty_name() { … }
}