vendredi 5 janvier 2018

Convert type of std::tuple to std::pair

Boost document show us how to implement a type converter

template<class A, template<class...> class B> struct mp_rename_impl;

template<template<class...> class A, class... T, template<class...> class B>
    struct mp_rename_impl<A<T...>, B>
{
    using type = B<T...>;
};

template<class A, template<class...> class B>
    using mp_rename = typename mp_rename_impl<A, B>::type;

Function of this mp_rename is convert type A to type B.

Example :

mp_rename<std::pair<int, double>, std::tuple>

equal to

std::tuple<int, double>

As far as I know

mp_rename<std::pair<int, double>, std::tuple>

call

template<class A, template<class...> class B> struct mp_rename_impl;

After that forward to

template<template<class...> class A, class... T, template<class...> class B> struct mp_rename_impl<A<T...>, B>    

My question is, why the compiler know it should forward to

template<template<class...> class A, class... T, template<class...> class B> struct mp_rename_impl<A<T...>, B>

and split class A into

template<class...> class A, class... T

Aucun commentaire:

Enregistrer un commentaire