Проблема в том, что это std::map m{{4, "four"s},{7,"seven"s},{1,"one"s},{5,"five"s}}; // error
является {}
из {}
с, и CTAD не делает этого.
Если вы сделаете std::map m{std::pair{4, "four"s},{7,"seven"s},{1,"one"s},{5,"five"s}};
, он станет списком инициализатора, который CTADработает на.