On Mon, 1 Mar 2021 at 23:54, Thiago Macieira <thiago.macie...@intel.com> wrote: > But your suggestion does work. We don't need to apply them to all macros, only > those that are new in a given version, like __cpp_lib_atomic_wait or > __cpp_lib_latch in this case. Alternatively, implementations can set the macro > to a given value below the standard-required one (incl. 1) to indicate that > they haven't achieved stability. > > That would make my check: > > #if __cplusplus >= 202002L && __has_include(<latch>) > # include <latch> > #endif > #if __cpp_lib_latch < 201907L > # error "Please upgrade your Standard Library" > #endif
Well, this would be different. What I'm suggesting is not quite that; for any *new* facility, we'd make sure that its draft macro and the final IS macro are different, but the minimum value is the first draft version, not anything below it. I don't care too much, that approach and yours would work the same way. Things that already had an IS value for a macro and haven't changed since don't need to be changed. And we don't need to bump all values of existing facilities either, just for those that got changes, so some existing macros would be considered lost causes. Like the ones we're talking about, because the cats are already out of the bag. I'll write a paper. That won't help you now, but it gives us tools in the future.