fork download
  1. template <typename Class, typename Ret, typename... Args, typename Qual>
  2. class mem_fun_overload_element_impl<Class, Ret(Args...), Qual> {
  3. using mem_fun_type = AddFunctionQualifiers<Ret(Class::*)(Args...), Qual>;
  4. public:
  5. mem_fun_overload_element_impl() = delete;
  6. template <typename T,
  7. DisableIf<is_related<mem_fun_overload_element_impl, T>> = {}>
  8. explicit mem_fun_overload_element_impl(T&& t)
  9. : mem_fun_ptr(std::forward<T>(t)) {}
  10. #ifndef WHEELS_NO_RVALUE_THIS
  11. template <typename Q = Qual,
  12. EnableIf<Not<is_rref_qualifier<Q>>> = {}>
  13. #endif // WHEELS_NO_RVALUE_THIS
  14. Ret operator()(AddCvQualifiers<Class, Qual>& c, Args&&... args) const {
  15. return (c.*mem_fun_ptr)(std::forward<Args>(args)...);
  16. }
  17. #ifndef WHEELS_NO_RVALUE_THIS
  18. template <typename Q = Qual,
  19. EnableIf<Not<is_lref_qualifier<Q>>> = {}>
  20. #endif // WHEELS_NO_RVALUE_THIS
  21. Ret operator()(AddCvQualifiers<Class, Qual>&& c, Args&&... args) const {
  22. return (std::move(c).*mem_fun_ptr)(std::forward<Args>(args)...);
  23. }
  24. Ret operator()(AddCvQualifiers<Class, Qual>* c, Args&&... args) const {
  25. return (c->*mem_fun_ptr)(std::forward<Args>(args)...);
  26. }
  27. private:
  28. mem_fun_type mem_fun_ptr;
  29. };
  30.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty