// Copyright (c) 2018-2025 Jean-Louis Leroy // 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) #define BOOST_TEST_MODULE openmethod #include #include #include struct static_registry : boost::openmethod::registry {}; #define BOOST_OPENMETHOD_DEFAULT_REGISTRY static_registry #include #include #include struct Animal {}; struct Dog : Animal {}; struct Cat : Animal {}; using namespace boost::openmethod::aliases; BOOST_OPENMETHOD_CLASSES(Animal, Dog, Cat); BOOST_OPENMETHOD(poke, (virtual_ptr, std::ostream&), void); BOOST_OPENMETHOD_OVERRIDE(poke, (virtual_ptr, std::ostream& os), void) { os << "bark"; } BOOST_OPENMETHOD_OVERRIDE(poke, (virtual_ptr, std::ostream& os), void) { os << "hiss"; } BOOST_AUTO_TEST_CASE(static_rtti) { boost::openmethod::initialize(); auto a = make_unique_virtual(); auto b = make_unique_virtual(); { std::stringstream os; poke(a, os); BOOST_TEST(os.str() == "hiss"); } { std::stringstream os; poke(b, os); BOOST_TEST(os.str() == "bark"); } }