Acabo de ver a Stephan T. Lavavej hablar CppCon 2018sobre "Deducción de argumentos de plantilla de clase", donde en algún momento dice por cierto:
En el tipo de C ++ la información casi nunca fluye hacia atrás ... Tuve que decir "casi" porque hay uno o dos casos, posiblemente más pero muy pocos .
A pesar de tratar de averiguar a qué casos se refería, no se me ocurrió nada. De ahí la pregunta:
¿En qué casos el estándar C ++ 17 exige que la información de tipo se propague hacia atrás?
c++
types
language-lawyer
c++17
type-deduction
Massimiliano
fuente
fuente

Respuestas:
Aquí hay al menos un caso:
si lo hace
foo f; int x = f; double y = f;, la información de tipo fluirá "hacia atrás" para averiguar quéThay dentrooperator T.Puede usar esto de una manera más avanzada:
entonces ahora puedo hacer
y funciona.
Por supuesto, ¿por qué no hacerlo
{1,2,3}? Bueno,{1,2,3}no es una expresión.que, sin duda, requieren un poco más de magia: ejemplo en vivo . (Tengo que hacer que la devolución de deduce haga una verificación SFINAE de F, luego haga que F sea compatible con SFINAE, y tengo que bloquear std :: initializer_list en el operador deduce_return_t T.)
fuente
&&calificador en eloperator T()es un gran toque; ayuda a evitar la mala interacción conautoal causar un error de compilación siautose usa incorrectamente aquí.Stephan T.Lavavej explicó el caso del que estaba hablando en un tweet :
podemos ver ejemplos de esto en la página cppreference en la dirección de la función sobrecargada , he exceptuado algunos a continuación:
Michael Park agrega :
y proporciona este ejemplo en vivo :
que elaboro un poco más aquí .
fuente
Creo en la transmisión estática de funciones sobrecargadas, el flujo va en la dirección opuesta a la resolución de sobrecarga habitual. Uno de esos está al revés, supongo.
fuente