It's possible to use some useful std headers like <initiaizer_list> and <type_traits> without hacks. If you're in C++20, you can also have access to <concepts> and <coroutine>, among others. I had implemented some metafunctions of <type_traits> to support two works and it's good news to promote this effort to something acting as a fallback when the toolchain doesn't use the freestanding implementation of libstdc++.
The subset of headers that are part of the freestanding implementation is small nowadays, but there is a proposal in the pipeline to expand the set and to better delineate what should be or at least can be put in the freestanding implementation of the C++ standard library. Why not <tuple>, <array>, <variant> and others with some adjustments of what should be only in the hosted implementation?
I have used the following to configure my avr-gcc 10.2.0 with avr-libc 2.0:
../configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ --disable-nls --disable-libssp --with-dwarf2 --with-newlib --disable-__cxa_atexit --disable-threads --disable-shared --disable-sjlj-exceptions --enable-libstdcxx --disable-hosted-libstdcxx --disable-bootstrap
 I didn't get the header in the gcc 10.2.0 but it must be available from the standard. Unfortunately, gcc 10.2.0 doesn't elide the allocation to coroutine frames when it's possible, which means that IMO, at first, the C++20 coroutines is not useful in AVR projects