A qd is different from a cpp dev at hft.
In my experience, both requires different type of skills. While a qd role requires more breadth in - maths (probability, calc, stochastic calc), stats(regression, little bit econometrics), programming(leetcode, ds/algo, networks, little bit os), and finance(black-scholes, binomial etc), the questions which are asked are not that much in depth. And most of these qd's use python instead of cpp.
Whereas, a cpp at top hft is an entirely different ballgame, it checks depth and only in computer science. They don't much care about probability, regression or finance. But they go very deep in cs fundamentals. You can expect questions from topics ranging from -
general cpp (implement lock, spin lock, member function pointers)
cpp template metaprogramming (calculate compile time of, let's say gcd)
operating system (kernel bypass, mutex vs semaphore)
networks (tcp vs udp - congestion controls)
general cs (branchless programming, realtime programming, kernel tuning, assembly syscall primer)
So, if you are targeting cpp dev at top hft, then go the cs route (bachelors plus masters if necessary). For a qd, math+cs makes sense.
I personally think that becoming hft dev is more difficult than a qd.