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.
Maybe we could add a note here to notice user that they could use using to avoid the error.