summaryrefslogtreecommitdiff
path: root/libs/type_index/examples/inheritance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/type_index/examples/inheritance.cpp')
-rw-r--r--libs/type_index/examples/inheritance.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/libs/type_index/examples/inheritance.cpp b/libs/type_index/examples/inheritance.cpp
index c2634397e0..3da75271e8 100644
--- a/libs/type_index/examples/inheritance.cpp
+++ b/libs/type_index/examples/inheritance.cpp
@@ -13,6 +13,7 @@
*/
#include <boost/type_index.hpp>
+#include <boost/type_index/runtime_cast/register_runtime_class.hpp>
#include <iostream>
struct A {
@@ -21,6 +22,7 @@ struct A {
};
struct B: public A { BOOST_TYPE_INDEX_REGISTER_CLASS };
struct C: public B { BOOST_TYPE_INDEX_REGISTER_CLASS };
+struct D: public C { BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(BOOST_TYPE_INDEX_NO_BASE_CLASS) };
void print_real_type(const A& a) {
std::cout << boost::typeindex::type_id_runtime(a).pretty_name() << '\n';
@@ -31,6 +33,15 @@ int main() {
const A& c_as_a = c;
print_real_type(c_as_a); // Outputs `struct C`
print_real_type(B()); // Outputs `struct B`
+
+/*`
+ It's also possible to use type_id_runtime with the BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS, which adds additional
+ information for runtime_cast to work.
+*/
+ D d;
+ const A& d_as_a = d;
+ print_real_type(d_as_a); // Outputs `struct D`
+
}
//] [/type_index_derived_example]