Introspecting class members with std::is_detected

At the time of writing this book, std::is_detected is currently located in the standard library extensions, but we think it is far too important to ignore in this chapter. If you are using GCC or Clang, it's currently located in <experimental/type_traits> and exists in the std::experimental namespace.

The is_detected type trait is used to detect if a class contains a particular member. Let's take a look at how it is used to detect whether a class has a particular member function by name. If the member function exists, the value of the returned type is true; otherwise, it's false.

Here are two completely different classes:

struct Octopus { auto mess_with_arms() {} }; struct Whale { auto blow_a_fountain() ...

Get C++ High Performance now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.