// Copyright 2013-2017 Antony Polukhin // Distributed under the Boost Software License, Version 1.0. // (See the accompanying file LICENSE_1_0.txt // or a copy at <http://www.boost.org/LICENSE_1_0.txt>.) //[type_index_registry_example /*` The following example shows how an information about a type could be stored. Example works with and without RTTI. */ #include <boost/type_index.hpp> #include <boost/unordered_set.hpp> //<- // Making `#include <cassert>` visible in docs, while actually using `BOOST_TEST` // instead of `assert`. This is required to verify correct behavior even if NDEBUG // is defined and to avoid `unused local variable` warnings with defined NDEBUG. #include <boost/core/lightweight_test.hpp> #ifdef assert # undef assert #endif #define assert(X) BOOST_TEST(X) /* !Comment block is not closed intentionaly! //-> #include <cassert> //<- !Closing comment block! */ //-> int main() { boost::unordered_set<boost::typeindex::type_index> types; // Storing some `boost::type_info`s types.insert(boost::typeindex::type_id<int>()); types.insert(boost::typeindex::type_id<float>()); // `types` variable contains two `boost::type_index`es: assert(types.size() == 2); // Const, volatile and reference will be striped from the type: bool is_inserted = types.insert(boost::typeindex::type_id<const int>()).second; assert(!is_inserted); assert(types.erase(boost::typeindex::type_id<float&>()) == 1); // We have erased the `float` type, only `int` remains assert(*types.begin() == boost::typeindex::type_id<int>()); } //] [/type_index_registry_example]