From cf5fcc0a1e5f971d2294d78ab0fac2c280dcafe2 Mon Sep 17 00:00:00 2001 From: "Troy D. Straszheim" Date: Wed, 8 Apr 2009 12:08:35 +0000 Subject: [PATCH] Test for overload resolution bug. See this mail for details: http://mail.python.org/pipermail/cplusplus-sig/2009-March/014362.html [SVN r52250] --- test/CMakeLists.txt | 7 ++++ test/test_overload_resolution.cpp | 53 +++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 test/test_overload_resolution.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0bc615dc..fd86d455 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -95,6 +95,13 @@ bpl_test(keywords keywords_test.py keywords.cpp) boost_python_extension(builtin_converters_ext test_builtin_converters.cpp) bpl_test(builtin_converters test_builtin_converters.py builtin_converters_ext) +# +# See the contents of this file for more details on an existing +# overload resoluton bug. +# +# boost_python_extension(overload_resolution test_overload_resolution.cpp) +# + bpl_test(test_pointer_adoption) bpl_test(operators) bpl_test(callbacks) diff --git a/test/test_overload_resolution.cpp b/test/test_overload_resolution.cpp new file mode 100644 index 00000000..e15bcc6a --- /dev/null +++ b/test/test_overload_resolution.cpp @@ -0,0 +1,53 @@ +// Copyright Troy D. Straszheim 2009 +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// +// example that shows problems with overloading and automatic conversion. +// if you call one of the below functions from python with bool/int/double, +// you'll see that the overload called is first match, not best match. +// See overload matching in luabind for an example of how to do this better. +// +// see this mail: +// http://mail.python.org/pipermail/cplusplus-sig/2009-March/014362.html +// +// This test isn't called by the cmake/jamfiles. For future use. +// +#include +#include +#include +#include +#include +#include +#include + +using boost::python::def; +using boost::python::handle; +using boost::python::object; +using boost::python::borrowed; + +std::string takes_bool(bool b) { return "bool"; } +std::string takes_int(int b) { return "int"; } +std::string takes_double(double b) { return "double"; } + + +BOOST_PYTHON_MODULE(overload_resolution) +{ + def("bid", takes_bool); + def("bid", takes_int); + def("bid", takes_double); + + def("dib", takes_double); + def("dib", takes_int); + def("dib", takes_bool); + + def("idb", takes_int); + def("idb", takes_double); + def("idb", takes_bool); + + def("bdi", takes_bool); + def("bdi", takes_double); + def("bdi", takes_int); +} +