From 044590e782d3df38a3c52017c819280cb493fb16 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 16 Aug 2021 08:03:46 +0700 Subject: [PATCH] disable recursive wrapper types --- headers/meta.hpp/meta_utilities/arg.hpp | 10 ++++++++-- headers/meta.hpp/meta_utilities/inst.hpp | 16 ++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/headers/meta.hpp/meta_utilities/arg.hpp b/headers/meta.hpp/meta_utilities/arg.hpp index 4cedebf..9364d60 100644 --- a/headers/meta.hpp/meta_utilities/arg.hpp +++ b/headers/meta.hpp/meta_utilities/arg.hpp @@ -164,7 +164,10 @@ namespace meta_hpp arg(const arg&) = delete; arg& operator=(const arg&) = delete; - template < typename T > + template < typename T + , std::enable_if_t, arg>, int> = 0 + , std::enable_if_t, inst>, int> = 0 + , std::enable_if_t, value>, int> = 0 > explicit arg(T&& v); template < typename To > @@ -176,7 +179,10 @@ namespace meta_hpp namespace meta_hpp { - template < typename T > + template < typename T + , std::enable_if_t, arg>, int> + , std::enable_if_t, inst>, int> + , std::enable_if_t, value>, int> > arg::arg(T&& v) : arg_base{typename_arg} , data_{const_cast*>(std::addressof(v))} {} diff --git a/headers/meta.hpp/meta_utilities/inst.hpp b/headers/meta.hpp/meta_utilities/inst.hpp index 7d68a5a..9e94ee5 100644 --- a/headers/meta.hpp/meta_utilities/inst.hpp +++ b/headers/meta.hpp/meta_utilities/inst.hpp @@ -136,10 +136,10 @@ namespace meta_hpp inst(const inst&) = delete; inst& operator=(const inst&) = delete; - template < typename T, std::enable_if_t< - std::is_class_v || - (std::is_reference_v && std::is_class_v>) - , int> = 0 > + template < typename T + , std::enable_if_t, arg>, int> = 0 + , std::enable_if_t, inst>, int> = 0 + , std::enable_if_t, value>, int> = 0 > explicit inst(T&& v); template < typename To > @@ -151,10 +151,10 @@ namespace meta_hpp namespace meta_hpp { - template < typename T, std::enable_if_t< - std::is_class_v || - (std::is_reference_v && std::is_class_v>) - , int> > + template < typename T + , std::enable_if_t, arg>, int> + , std::enable_if_t, inst>, int> + , std::enable_if_t, value>, int> > inst::inst(T&& v) : inst_base{typename_arg} , data_{const_cast*>(std::addressof(v))} {}