Guide de déduction défini par l'utilisateur pour les types std

Aug 15 2020

Pour une raison quelconque, il y a toujours un manque de CTAD attendu pour std::initializer_listin clang :

std::initializer_list l{1,2,3}; // error in clang

L'ajout d'un guide défini par l'utilisateur comme celui-ci peut résoudre le problème :

namespace std {
    template<class T> 
    initializer_list(const initializer_list<T>&) -> initializer_list<T>; 
} 

Mais est-il permis d'ajouter un guide défini par l'utilisateur pour CTAD pour les std::types ?

Réponses

5 Oliv Aug 15 2020 at 17:17

Ajouter un guide de déduction à un type de bibliothèque standard est UB [namespace std]§4.4 :

Le comportement d'un programme C++ est indéfini s'il déclare : [...]

  • un guide de déduction pour tout modèle de classe de bibliothèque standard.