add more restrict for write log with data/str (#652)

This commit is contained in:
qicosmos 2024-03-29 16:57:20 +08:00 committed by GitHub
parent 119abbc8f7
commit 38e2b7bd01
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 4 deletions

View File

@ -63,8 +63,8 @@ template <typename Type, typename = void>
struct has_data : std::false_type {};
template <typename T>
struct has_data<T, std::void_t<decltype(std::declval<T>().data())>>
: std::true_type {};
struct has_data<T, std::void_t<decltype(std::declval<std::string>().append(
std::declval<T>().data()))>> : std::true_type {};
template <typename T>
constexpr inline bool has_data_v = has_data<std::remove_cvref_t<T>>::value;
@ -73,8 +73,8 @@ template <typename Type, typename = void>
struct has_str : std::false_type {};
template <typename T>
struct has_str<T, std::void_t<decltype(std::declval<T>().str())>>
: std::true_type {};
struct has_str<T, std::void_t<decltype(std::declval<std::string>().append(
std::declval<T>().str()))>> : std::true_type {};
template <typename T>
constexpr inline bool has_str_v = has_str<std::remove_cvref_t<T>>::value;

View File

@ -42,6 +42,20 @@ TEST_CASE("test severity") {
easylog::severity_str(easylog::Severity::FATAL));
}
struct dummy_t {
int* data() const {
static int val = 42;
return &val;
}
friend std::ostream& operator<<(std::ostream& os, const dummy_t& t);
};
std::ostream& operator<<(std::ostream& os, const dummy_t& t) {
os << t.data();
return os;
}
TEST_CASE("test basic") {
std::string filename = "easylog.txt";
std::filesystem::remove(filename);
@ -65,6 +79,8 @@ TEST_CASE("test basic") {
ELOG_INFO << "info log";
easylog::set_min_severity(Severity::DEBUG);
ELOG_INFO << dummy_t{};
std::unique_ptr<int> ptr(new int(42));
ELOG_INFO << ptr.get();
ELOG_INFO << 42 << " " << 4.5 << 'a' << Severity::DEBUG;