text: #ifndef PYTHONIC_INCLUDE_TYPES_CFUN_HPP
  #define PYTHONIC_INCLUDE_TYPES_CFUN_HPP
  
  PYTHONIC_NS_BEGIN
  
  namespace types
  {
  
    template <class T>
    struct cfun;
  
    template <class ReturnType, class... ArgsType>
    struct cfun<ReturnType(ArgsType...)> {
  
      using callable = void;
  
      cfun(ReturnType (*fun)(ArgsType...));
  
      ReturnType (*ptr)(ArgsType...);
  
      ReturnType operator()(ArgsType... args) const;
    };
  }
  PYTHONIC_NS_END
  
  #ifdef ENABLE_PYTHON_MODULE
  
  #include "pythonic/python/core.hpp"
  
  PYTHONIC_NS_BEGIN
  
  template <class R, class... Args>
  struct to_python<types::cfun<R(Args...)>> {
    static PyObject *convert(types::cfun<R(Args...)> const &v);
  };
  
  template <class R, class... Args>
  struct from_python<types::cfun<R(Args...)>> {
    static bool is_convertible(PyObject *obj);
    static types::cfun<R(Args...)> convert(PyObject *obj);
  };
  PYTHONIC_NS_END
  
  #endif
  
  #endif
  