mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-14 11:40:35 +07:00
requires instead static_assert for registry binds
This commit is contained in:
18
.clang-tidy
Normal file
18
.clang-tidy
Normal file
@@ -0,0 +1,18 @@
|
||||
Checks: '-*,
|
||||
|
||||
clang-analyzer-*,
|
||||
|
||||
concurrency-*,
|
||||
|
||||
cppcoreguidelines-*,
|
||||
|
||||
modernize-*,
|
||||
-modernize-use-trailing-return-type,
|
||||
|
||||
performance-*,
|
||||
|
||||
portability-*,
|
||||
|
||||
readability-*,
|
||||
-readability-use-anyofallof,
|
||||
'
|
||||
@@ -29,8 +29,10 @@ target_compile_options(${PROJECT_NAME}
|
||||
-Wno-c++98-compat-pedantic
|
||||
-Wno-ctad-maybe-unsupported
|
||||
-Wno-exit-time-destructors
|
||||
-Wno-extra-semi-stmt
|
||||
-Wno-float-equal
|
||||
-Wno-padded
|
||||
-Wno-reserved-identifier
|
||||
-Wno-shadow-field
|
||||
-Wno-shadow-field-in-constructor
|
||||
-Wno-unknown-warning-option
|
||||
|
||||
@@ -18,19 +18,23 @@ namespace meta_hpp
|
||||
operator class_type() const noexcept;
|
||||
|
||||
template < typename... Args >
|
||||
class_bind& ctor_();
|
||||
class_bind& ctor_()
|
||||
requires std::is_constructible_v<Class, Args...>;
|
||||
|
||||
template < detail::class_kind Base >
|
||||
class_bind& base_();
|
||||
class_bind& base_()
|
||||
requires std::is_base_of_v<Base, Class>;
|
||||
|
||||
template < detail::function_kind Function >
|
||||
class_bind& function_(std::string name, Function function);
|
||||
|
||||
template < detail::member_kind Member >
|
||||
class_bind& member_(std::string name, Member member);
|
||||
class_bind& member_(std::string name, Member member)
|
||||
requires std::same_as<Class, typename detail::member_traits<Member>::class_type>;
|
||||
|
||||
template < detail::method_kind Method >
|
||||
class_bind& method_(std::string name, Method method);
|
||||
class_bind& method_(std::string name, Method method)
|
||||
requires std::same_as<Class, typename detail::method_traits<Method>::class_type>;
|
||||
|
||||
template < detail::pointer_kind Pointer >
|
||||
class_bind& variable_(std::string name, Pointer pointer);
|
||||
@@ -60,7 +64,7 @@ namespace meta_hpp
|
||||
struct local_tag {};
|
||||
struct static_tag {};
|
||||
|
||||
explicit scope_bind(std::string_view name, local_tag);
|
||||
explicit scope_bind(std::string name, local_tag);
|
||||
explicit scope_bind(std::string_view name, static_tag);
|
||||
operator scope() const noexcept;
|
||||
|
||||
@@ -96,7 +100,7 @@ namespace meta_hpp
|
||||
return scope_bind{std::move(name), scope_bind::local_tag()};
|
||||
}
|
||||
|
||||
inline scope_bind static_scope_(std::string name) {
|
||||
return scope_bind{std::move(name), scope_bind::static_tag()};
|
||||
inline scope_bind static_scope_(std::string_view name) {
|
||||
return scope_bind{name, scope_bind::static_tag()};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,8 +22,9 @@ namespace meta_hpp
|
||||
|
||||
template < detail::class_kind Class >
|
||||
template < typename... Args >
|
||||
class_bind<Class>& class_bind<Class>::ctor_() {
|
||||
static_assert(std::is_constructible_v<Class, Args...>);
|
||||
class_bind<Class>& class_bind<Class>::ctor_()
|
||||
requires std::is_constructible_v<Class, Args...>
|
||||
{
|
||||
auto ctor_state = detail::ctor_state::make<Class, Args...>();
|
||||
data_->ctors.emplace(ctor_state->index, std::move(ctor_state));
|
||||
return *this;
|
||||
@@ -31,8 +32,9 @@ namespace meta_hpp
|
||||
|
||||
template < detail::class_kind Class >
|
||||
template < detail::class_kind Base >
|
||||
class_bind<Class>& class_bind<Class>::base_() {
|
||||
static_assert(std::is_base_of_v<Base, Class>);
|
||||
class_bind<Class>& class_bind<Class>::base_()
|
||||
requires std::is_base_of_v<Base, Class>
|
||||
{
|
||||
data_->bases.emplace(resolve_type<Base>());
|
||||
return *this;
|
||||
}
|
||||
@@ -47,8 +49,9 @@ namespace meta_hpp
|
||||
|
||||
template < detail::class_kind Class >
|
||||
template < detail::member_kind Member >
|
||||
class_bind<Class>& class_bind<Class>::member_(std::string name, Member member) {
|
||||
static_assert(std::same_as<Class, typename detail::member_traits<Member>::class_type>);
|
||||
class_bind<Class>& class_bind<Class>::member_(std::string name, Member member)
|
||||
requires std::same_as<Class, typename detail::member_traits<Member>::class_type>
|
||||
{
|
||||
auto member_state = detail::member_state::make<Member>(std::move(name), std::move(member));
|
||||
data_->members.emplace(member_state->index, std::move(member_state));
|
||||
return *this;
|
||||
@@ -56,8 +59,9 @@ namespace meta_hpp
|
||||
|
||||
template < detail::class_kind Class >
|
||||
template < detail::method_kind Method >
|
||||
class_bind<Class>& class_bind<Class>::method_(std::string name, Method method) {
|
||||
static_assert(std::same_as<Class, typename detail::method_traits<Method>::class_type>);
|
||||
class_bind<Class>& class_bind<Class>::method_(std::string name, Method method)
|
||||
requires std::same_as<Class, typename detail::method_traits<Method>::class_type>
|
||||
{
|
||||
auto method_state = detail::method_state::make<Method>(std::move(name), std::move(method));
|
||||
data_->methods.emplace(method_state->index, std::move(method_state));
|
||||
return *this;
|
||||
|
||||
@@ -11,9 +11,11 @@
|
||||
|
||||
namespace meta_hpp
|
||||
{
|
||||
inline scope_bind::scope_bind(std::string_view name, local_tag)
|
||||
: state_{detail::scope_state::make(std::string{name})} {}
|
||||
// NOLINTNEXTLINE(readability-named-parameter)
|
||||
inline scope_bind::scope_bind(std::string name, local_tag)
|
||||
: state_{detail::scope_state::make(std::move(name))} {}
|
||||
|
||||
// NOLINTNEXTLINE(readability-named-parameter)
|
||||
inline scope_bind::scope_bind(std::string_view name, static_tag)
|
||||
: state_{detail::scope_state::get_static(name)} {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user