diff --git a/include/pybind11/attr.h b/include/pybind11/attr.h index 1044db94d..742a2fc40 100644 --- a/include/pybind11/attr.h +++ b/include/pybind11/attr.h @@ -670,6 +670,12 @@ struct process_attributes { } }; +template +struct is_keep_alive : std::false_type { }; + +template +struct is_keep_alive> : std::true_type { }; + template using is_call_guard = is_instantiation; diff --git a/include/pybind11/pybind11.h b/include/pybind11/pybind11.h index 4387c2754..e2dddb9f0 100644 --- a/include/pybind11/pybind11.h +++ b/include/pybind11/pybind11.h @@ -1849,6 +1849,10 @@ public: const Extra &...extra) { static_assert(0 == detail::constexpr_sum(std::is_base_of::value...), "Argument annotations are not allowed for properties"); + static_assert(0 == detail::constexpr_sum(detail::is_call_guard::value...), + "def_property family does not currently support call_guard. Use a py::cpp_function instead."); + static_assert(0 == detail::constexpr_sum(detail::is_keep_alive::value...), + "def_property family does not currently support keep_alive. Use a py::cpp_function instead."); auto rec_fget = get_function_record(fget), rec_fset = get_function_record(fset); auto *rec_active = rec_fget; if (rec_fget) {