Writing your own type traits
In the previous recipe, we have seen what type traits are, what traits the standard provides, and how they can be used for various purposes. In this recipe, we take a step further and take a look at how to define our own custom traits.
Getting ready
It is recommended that you first read the recipe, Using type traits to query properties of types, before you continue with this one.
In this recipe, we will learn how to solve the following problem: we have several classes that support serialization. Without getting into any details, let's suppose some provide a "plain" serialization to a string (regardless of what that can mean), whereas others do it based on a specified encoding. The end goal is to create a single, uniform API for serializing objects of any of these types. For this, we will consider the following two classes:Â foo
that provides a simple serialization, and bar
that provides serialization with encoding:
   struct foo    { std::string serialize...