But this results in linking to be performed via the clang++ frontend instead of the specified lld. Why is this documented if it plainly does not work at all? Or am I misunderstanding the docs?
You effectively misunderstood how linker specification works.
It is possible to specify an alternate tool only on environments relying already directly on the linker tool for the link step: this is mainly the Windows platform with the MSVC compiler (or alternate compilers simulating this compiler). For other environments, the link step is done using the compiler as driver: this behavior cannot be changed.
Maybe some clarification is needed about these variables.
It’s not impossible to change this behavior, is it? There is CMAKE_CXX_LINK_* which lets you replace the compiler as a driver, I thought this was a new way to do just that but looking at the docs again they don’t actually imply that. And I don’t quite understand the purpose of CMAKE_*_USING_LINKER_MODE in that case since this seems to be “predetermined” by the compiler in use (i.e. TOOL for MSVS and FLAG for Clang/GCC).
It is not possible to change the behavior of how the link step is done (compiler as driver or linker).
And, effectively, the CMAKE_*_USING_LINKER_MODE variable is a bit curious but was there by the lack of the correct information. Now, CMake provides this information through the CMAKE_<LANG>_LINK_MODE variable, so this variable will be suppressed in some CMake future release.