fix clang warnings

This commit is contained in:
BlackMATov
2023-12-30 12:50:51 +07:00
parent 50d6ab4974
commit 0467d385be
5 changed files with 47 additions and 5 deletions

View File

@@ -161,6 +161,17 @@
#define META_HPP_DETAIL_IGNORE_OVERRIDE_WARNINGS_POP() META_HPP_DETAIL_CLANG_IGNORE_WARNINGS_POP() #define META_HPP_DETAIL_IGNORE_OVERRIDE_WARNINGS_POP() META_HPP_DETAIL_CLANG_IGNORE_WARNINGS_POP()
//
//
//
#define META_HPP_DETAIL_IGNORE_SIGN_CONVERSION_WARNINGS_PUSH() \
META_HPP_DETAIL_CLANG_IGNORE_WARNINGS_PUSH() \
META_HPP_DETAIL_CLANG_IGNORE_WARNING("-Wunknown-warning-option") \
META_HPP_DETAIL_CLANG_IGNORE_WARNING("-Wsign-conversion")
#define META_HPP_DETAIL_IGNORE_SIGN_CONVERSION_WARNINGS_POP() META_HPP_DETAIL_CLANG_IGNORE_WARNINGS_POP()
namespace meta_hpp::detail namespace meta_hpp::detail
{ {
template < typename Enum > template < typename Enum >
@@ -9014,7 +9025,10 @@ namespace meta_hpp::detail
namespace meta_hpp::detail namespace meta_hpp::detail
{ {
template < typename T > template < typename T >
requires requires(const T& v) { uvalue{*v}; } requires requires(const T& v) {
sizeof(*v);
uvalue{*v};
}
struct deref_traits<T> { struct deref_traits<T> {
uvalue operator()(const T& v) const { uvalue operator()(const T& v) const {
return uvalue{*v}; return uvalue{*v};
@@ -9036,13 +9050,20 @@ namespace meta_hpp::detail
namespace meta_hpp::detail namespace meta_hpp::detail
{ {
META_HPP_DETAIL_IGNORE_SIGN_CONVERSION_WARNINGS_PUSH()
template < typename T > template < typename T >
requires requires(const T& v, std::size_t i) { uvalue{v[i]}; } requires requires(const T& v, std::size_t i) {
sizeof(v[i]);
uvalue{v[i]};
}
struct index_traits<T> { struct index_traits<T> {
uvalue operator()(const T& v, std::size_t i) const { uvalue operator()(const T& v, std::size_t i) const {
return uvalue{v[i]}; return uvalue{v[i]};
} }
}; };
META_HPP_DETAIL_IGNORE_SIGN_CONVERSION_WARNINGS_POP()
} }
namespace meta_hpp::detail namespace meta_hpp::detail

View File

@@ -34,7 +34,7 @@ TEST_CASE("meta/meta_issues/random/3") {
{ {
meta::uvalue v{&int_func}; meta::uvalue v{&int_func};
CHECK(v.has_deref_op()); CHECK_FALSE(v.has_deref_op());
CHECK(v.get_type() == meta::resolve_type<int(*)()>()); CHECK(v.get_type() == meta::resolve_type<int(*)()>());
CHECK((v.as<decltype(&int_func)>() == &int_func)); CHECK((v.as<decltype(&int_func)>() == &int_func));
} }

View File

@@ -161,3 +161,14 @@
META_HPP_DETAIL_CLANG_IGNORE_WARNING("-Wsuggest-override") META_HPP_DETAIL_CLANG_IGNORE_WARNING("-Wsuggest-override")
#define META_HPP_DETAIL_IGNORE_OVERRIDE_WARNINGS_POP() META_HPP_DETAIL_CLANG_IGNORE_WARNINGS_POP() #define META_HPP_DETAIL_IGNORE_OVERRIDE_WARNINGS_POP() META_HPP_DETAIL_CLANG_IGNORE_WARNINGS_POP()
//
//
//
#define META_HPP_DETAIL_IGNORE_SIGN_CONVERSION_WARNINGS_PUSH() \
META_HPP_DETAIL_CLANG_IGNORE_WARNINGS_PUSH() \
META_HPP_DETAIL_CLANG_IGNORE_WARNING("-Wunknown-warning-option") \
META_HPP_DETAIL_CLANG_IGNORE_WARNING("-Wsign-conversion")
#define META_HPP_DETAIL_IGNORE_SIGN_CONVERSION_WARNINGS_POP() META_HPP_DETAIL_CLANG_IGNORE_WARNINGS_POP()

View File

@@ -24,7 +24,10 @@ namespace meta_hpp::detail
namespace meta_hpp::detail namespace meta_hpp::detail
{ {
template < typename T > template < typename T >
requires requires(const T& v) { uvalue{*v}; } requires requires(const T& v) {
sizeof(*v);
uvalue{*v};
}
struct deref_traits<T> { struct deref_traits<T> {
uvalue operator()(const T& v) const { uvalue operator()(const T& v) const {
return uvalue{*v}; return uvalue{*v};

View File

@@ -23,11 +23,18 @@ namespace meta_hpp::detail
namespace meta_hpp::detail namespace meta_hpp::detail
{ {
META_HPP_DETAIL_IGNORE_SIGN_CONVERSION_WARNINGS_PUSH()
template < typename T > template < typename T >
requires requires(const T& v, std::size_t i) { uvalue{v[i]}; } requires requires(const T& v, std::size_t i) {
sizeof(v[i]);
uvalue{v[i]};
}
struct index_traits<T> { struct index_traits<T> {
uvalue operator()(const T& v, std::size_t i) const { uvalue operator()(const T& v, std::size_t i) const {
return uvalue{v[i]}; return uvalue{v[i]};
} }
}; };
META_HPP_DETAIL_IGNORE_SIGN_CONVERSION_WARNINGS_POP()
} }