There are many ways to implement a configuration library; some of them are "stringly-typed", some use boost::any to implement erasure and expose it in their interfaces, but I think that this just means that the abstractions are leaking. I don't want to know what specific type erasure implementation is used in the library; I don't want to deal with things like `any_cast`, and I definitely do not want to ever get `bad_any_cast` thrown at me.
So, I've created a library that allows you to create type-level tags for your data that's to be stored in the configuration object, so the checking for `bad_any_cast` is moved from runtime to compile time, and we all love compile time checks more than runtime ones. This talk is meant as a tour around the library and its features. I will also talk about Boost.TypeIndex library, and some metaprogramming tricks that make using `enable_if` less painful.Slides