I finally found a really nice example explaining the problem. I'd like to summarize the main points. Assume the existence of the following metafunction: template<typename T> struct map_of { using type = std::map<T, T>; }; The following function seems therefore reasonable: template<typename U&…