Chuanqi's patch to detect mixed std and std::experimental namespace use for coroutine types (D108696) was a little aggressive.
a) Users converting code might use a using-decl from std::experimental::coroutine_traits to std::coroutine_traits, or vice-versa. We should be silent about that, it's not problematic.
b) Users who have conflicting declarations in the two namespaces should be told about it, but we should not prevent compilation -- there's nothing ill-defined about having stuff in std::experimental. But you are probably confused. So this becomes a warning.
While there I reorganized the code -- we look in both places, if we found nothing bail. Otherwise check the thing we found is a template (prefering std's result here). Then finally if we found it only in std::experimental, of if we found different things in both places also warn.
The diagnostics provide a note indicating the location of what we found, so the user is not left guessing where the problematic declaration resides.
Perhaps s/for coroutine/for coroutine components/. And then I wonder why there's a second sentence in this message — could you just emit warn_deprecated_coroutine_namespace as well?
If we're tightening up these messages, then maybe
For simple wording changes like the removal of "Please", or the refactor I just suggested, which then have trivial but distracting effects in the test files, personally I would suggest you split those wording changes into a teeny-tiny separate PR and get them landed ASAP. IIUC, the main point of this PR is to downgrade this err_ into a warn_.