El módulo mp11 de la biblioteca de metaprogramación de C++ boost proporciona una serie de convenientes algoritmos y funciones de metaprogramación. Entre ellos, mp_is_list es una metafunción para juzgar si un tipo es una lista.
La definición de la función mp_is_list es la siguiente:
template <class T> struct mp_is_list;
Hereda de std::false_type o std::true_type, dependiendo de si es un tipo de lista o no.
El siguiente es un código de programa que prueba el uso de la función mp_is_list:
#include <iostream>
#include <type_traits>
#include <boost/mp11/list.hpp>
#include <boost/mp11/utility.hpp>
int main() {
using namespace std;
using namespace boost::mp11;
// test for list type
static_assert(mp_is_list<mp_list<int, char, double>>::value);
static_assert(mp_is_list<mp_list<int, char>>::value);
static_assert(mp_is_list<mp_list<>>::value);
// test for non-list type
static_assert(!mp_is_list<int>::value);
static_assert(!mp_is_list<char>::value);
static_assert(!mp_is_list<double>::value);