Использование строк в выражениях switch - где мы находимся с C ++ 17?

У каждого из нас (возможно) была детская мечта написать:

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

но это невозможно, как объясняется в ответах на этот вопрос из древних дней (2009):

Почему оператор switch нельзя применять к строкам?

С тех пор мы увидели появление C ++ 11, который позволяет нам идти дальше:

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

как описано вответ вХэширование строки времени компиляции - что не так уж и плохо, хотя на самом деле это не совсем то, что мы хотели - есть вероятность столкновения.

Мой вопрос: повлияло ли развитие языка с тех пор (в основном C ++ 14, я полагаю) на способ, которым можно было бы написать некий строковый регистр? Или упростить гайки и болты для достижения вышеизложенного?

В частности, с заключениемСтандарт C ++ 17 являющийсяпрямо за углом - Мне интересен ответ, учитывая, что мы можем предположить, что стандарт будет содержать.

Замечания: Это не обсуждение достоинств использования операторов switch, ни темы о meta. Я задаю информативный вопрос, поэтому, пожалуйста, ответьте / вверх / вниз на основе этого.

Ответы на вопрос(7)

Ваш ответ на вопрос