title: MSVC /arch:[instruction set] - SSE3, AVX, AVX2
body: <p>Here is an example of a class which shows supported instruction sets. <a href="https://msdn.microsoft.com/en-us/library/hskdteyh.aspx" rel="nofollow">https://msdn.microsoft.com/en-us/library/hskdteyh.aspx</a></p>
  
  <p>I want to write three different implementations of a single function, each of them using different instruction set. But due to flag /ARCH:AVX2, for example, this app won't ever run anywhere but on 4th+ generation of Intel processors, so the whole point of checking is pointless.</p>
  
  <p>So, question is: what <em>exactly</em> this flag does? Enables <em>support</em> or enables <em>compiler optimizations using provided instruction sets</em>?</p>
  
  <p>In other words, can I completely remove this flag and keep using functions from immintrin.h, emmintrin.h, etc?</p>