Yeah thts the fun of it, you create your kernel/function so that the simd level is a template parameter, and then you can use simple branching like:
if(supports<avx512>){ myAlgo<avx512>(); } else{ myAlgo<avx>(); }
Ive also used it for benchmarking to see if my code scales to different simd widths well and its a huge help