From b1dbe110ab6c3aba32c314b39ed33710ad7a563e Mon Sep 17 00:00:00 2001 From: Bryn Lloyd Date: Mon, 3 Jan 2022 15:27:13 +0100 Subject: [PATCH 1/3] add optional compile time check --- include/boost/python/args_fwd.hpp | 5 +++++ include/boost/python/make_function.hpp | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/boost/python/args_fwd.hpp b/include/boost/python/args_fwd.hpp index 39239461b0..a9c13147de 100644 --- a/include/boost/python/args_fwd.hpp +++ b/include/boost/python/args_fwd.hpp @@ -44,6 +44,11 @@ namespace detail { typedef char too_many_keywords[keywords > function_args ? -1 : 1]; }; + template + struct less_keywords_than_function_arguments + { + typedef char too_few_keywords[(keywords!=0 && keywords < function_args) ? -1 : 1]; + }; } } diff --git a/include/boost/python/make_function.hpp b/include/boost/python/make_function.hpp index 7dd7c316b3..88d541a149 100644 --- a/include/boost/python/make_function.hpp +++ b/include/boost/python/make_function.hpp @@ -56,7 +56,13 @@ namespace detail typedef typename detail::error::more_keywords_than_function_arguments< NumKeywords::value, arity >::too_many_keywords assertion BOOST_ATTRIBUTE_UNUSED; - + +#ifdef BOOST_PYTHON_CHECK_LESS_KEYWORDS_THAN_ARITY + typedef typename detail::error::less_keywords_than_function_arguments< + NumKeywords::value, arity + >::too_few_keywords assertion BOOST_ATTRIBUTE_UNUSED; +#endif + return objects::function_object( detail::caller(f, p) , kw); From cace6fd91aa2d863d3fb5c24e15d18b750a51a3d Mon Sep 17 00:00:00 2001 From: Bryn Lloyd Date: Mon, 3 Jan 2022 16:02:46 +0100 Subject: [PATCH 2/3] rename preprocessor macro --- include/boost/python/make_function.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/boost/python/make_function.hpp b/include/boost/python/make_function.hpp index 88d541a149..346279c36c 100644 --- a/include/boost/python/make_function.hpp +++ b/include/boost/python/make_function.hpp @@ -57,7 +57,7 @@ namespace detail NumKeywords::value, arity >::too_many_keywords assertion BOOST_ATTRIBUTE_UNUSED; -#ifdef BOOST_PYTHON_CHECK_LESS_KEYWORDS_THAN_ARITY +#ifdef BOOST_PYTHON_NUM_KEYWORDS_EQUALS_ARITY typedef typename detail::error::less_keywords_than_function_arguments< NumKeywords::value, arity >::too_few_keywords assertion BOOST_ATTRIBUTE_UNUSED; From ef09423bfb29b473e8f6911fb44014009262ee49 Mon Sep 17 00:00:00 2001 From: Bryn Lloyd Date: Tue, 4 Jan 2022 13:42:19 +0100 Subject: [PATCH 3/3] fix: use different typedef to avoid compile error --- include/boost/python/make_function.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/boost/python/make_function.hpp b/include/boost/python/make_function.hpp index 346279c36c..63b27ed4fe 100644 --- a/include/boost/python/make_function.hpp +++ b/include/boost/python/make_function.hpp @@ -60,7 +60,7 @@ namespace detail #ifdef BOOST_PYTHON_NUM_KEYWORDS_EQUALS_ARITY typedef typename detail::error::less_keywords_than_function_arguments< NumKeywords::value, arity - >::too_few_keywords assertion BOOST_ATTRIBUTE_UNUSED; + >::too_few_keywords assertion2 BOOST_ATTRIBUTE_UNUSED; #endif return objects::function_object(