meta: less sfinae, more concepts

This commit is contained in:
skypjack
2026-02-02 14:01:20 +01:00
parent f28104bfac
commit 0e5537e4a9

View File

@@ -293,7 +293,8 @@ public:
* @tparam Type Type of object to use to initialize the wrapper.
* @param value An instance of an object to use to initialize the wrapper.
*/
template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::decay_t<Type>, meta_any>>>
template<typename Type>
requires (!std::same_as<std::remove_cvref_t<Type>, meta_any>)
meta_any(Type &&value)
: meta_any{locator<meta_ctx>::value_or(), std::forward<Type>(value)} {}
@@ -303,7 +304,8 @@ public:
* @param area The context from which to search for meta types.
* @param value An instance of an object to use to initialize the wrapper.
*/
template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::decay_t<Type>, meta_any>>>
template<typename Type>
requires (!std::same_as<std::remove_cvref_t<Type>, meta_any>)
meta_any(const meta_ctx &area, Type &&value)
: meta_any{area, std::in_place_type<std::decay_t<Type>>, std::forward<Type>(value)} {}
@@ -383,7 +385,8 @@ public:
* @param value An instance of an object to use to initialize the wrapper.
* @return This meta any object.
*/
template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::decay_t<Type>, meta_any>>>
template<typename Type>
requires (!std::same_as<std::remove_cvref_t<Type>, meta_any>)
meta_any &operator=(Type &&value) {
emplace<std::decay_t<Type>>(std::forward<Type>(value));
return *this;
@@ -675,7 +678,8 @@ template<typename Type>
/*! @brief Opaque pointers to instances of any type. */
class meta_handle {
template<typename Type, typename... Args, typename = std::enable_if_t<std::is_same_v<std::decay_t<Type>, meta_any>>>
template<typename Type, typename... Args>
requires std::same_as<std::remove_cvref_t<Type>, meta_any>
meta_handle(int, Type &value, Args &&...args)
: any{std::forward<Args>(args)..., value.as_ref()} {}
@@ -693,7 +697,8 @@ public:
* @param ctx The context from which to search for meta types.
* @param value An instance of an object to use to initialize the handle.
*/
template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::decay_t<Type>, meta_handle>>>
template<typename Type>
requires (!std::same_as<std::remove_cvref_t<Type>, meta_handle>)
meta_handle(const meta_ctx &ctx, Type &value)
: meta_handle{0, value, ctx} {}
@@ -702,7 +707,8 @@ public:
* @tparam Type Type of object to use to initialize the handle.
* @param value An instance of an object to use to initialize the handle.
*/
template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::decay_t<Type>, meta_handle>>>
template<typename Type>
requires (!std::same_as<std::remove_cvref_t<Type>, meta_handle>)
meta_handle(Type &value)
: meta_handle{0, value} {}