msvc and known_semantics are not reserved identifiers in the C++ Standard, so users are allowed to #define them to anything, which may break every header that directly uses [[msvc::known_semantics]] (e.g. <type_traits>).
IIUC the Standard equivalently requires that every non-Standard attribute used in a Standard header to be spelled in reserved identifiers, e.g. [[__msvc__::__known_semantics__]]. Does MSVC support such spelling?