Guia de dedução definido pelo usuário para tipos de std

Aug 15 2020

Por algum motivo, ainda falta o CTAD esperado para std::initializer_listo clang :

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

Adicionar um guia definido pelo usuário como o seguinte pode corrigir o problema :

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

Mas é permitido adicionar um guia definido pelo usuário para CTAD para std::tipos?

Respostas

5 Oliv Aug 15 2020 at 17:17

Adicionar um guia de dedução a um tipo de biblioteca padrão é UB [namespace std]§4.4 :

O comportamento de um programa C++ é indefinido se ele declara: [...]

  • um guia de dedução para qualquer modelo de classe de biblioteca padrão.