Clang is still unhappy, trying another approach with defining my own concept

main
Maxime Coste 2021-11-25 22:30:02 +11:00
parent 4122b64ecd
commit 716f1f967a
1 changed files with 7 additions and 3 deletions

View File

@ -162,6 +162,9 @@ auto to_underlying(E value)
template<typename> class FunctionRef;
template<typename From, typename To>
concept ConvertibleTo = std::is_convertible_v<From, To>;
template<typename Res, typename... Args>
class FunctionRef<Res(Args...)>
{
@ -174,9 +177,10 @@ public:
{}
template<typename Target>
requires (not std::is_same_v<FunctionRef, std::remove_cvref_t<Target>> and
(std::is_void_v<Res> or
requires (Target t, Args... a, void(&func)(Res)) { func(t(a...)); }))
requires requires (Target t, Args... a) {
requires not std::is_same_v<FunctionRef, std::remove_cvref_t<Target>>;
{ t(a...) } -> ConvertibleTo<Res>;
}
FunctionRef(Target&& target)
: m_target{&target},
m_invoker{[](void* target, Args... args) {