Uso de cadenas en declaraciones de cambio: ¿dónde nos encontramos con C ++ 17?

Cada uno de nosotros ha tenido (probablemente) el sueño de la infancia de escribir:

switch(my_std_string) {
case "foo":  do_stuff(); break;
case "bar":  do_other_stuff(); break;
default:     just_give_up();
}

pero esto no es posible, como se explica en las respuestas a esta pregunta de los viejos tiempos (2009):

¿Por qué la instrucción switch no se puede aplicar en cadenas?

Desde entonces, hemos visto la llegada de C ++ 11, que nos permite llegar hasta:

switch (my_hash::hash(my_std_string)) {
case "foo"_hash:  do_stuff(); break;
case "bar"_hash:  do_other_stuff(); break;
default:          just_give_up();
}

como se describe en unresponder aTiempo de compilación hashing de cadenas - lo cual no es tan malo, aunque en realidad no hace exactamente lo que queríamos - existe la posibilidad de colisión.

Mi pregunta es: ¿El desarrollo del lenguaje desde entonces (en su mayoría C ++ 14 supongo) ha afectado la forma en que uno escribiría una especie de declaración de caso de cadena? ¿O simplificó las tuercas y tornillos para lograr lo anterior?

Específicamente, con la conclusión de laC ++ 17 estándar siendoa la vuelta de la esquina - Estoy interesado en la respuesta dado lo que podemos asumir que contendrá el estándar.

Nota: Esta no es una discusión sobre el mérito de usar declaraciones de cambio, ni un hilo en meta. Estoy haciendo una pregunta informativa, así que por favor responda / up / downvote basado en eso.