On Monday, 1 March 2021 12:35:05 PST Ville Voutilainen wrote: > I can't make the above code work, in any reasonable manner, because > it's doing feature detection incorrectly. :) > What I can imagine doing, however, is this: > > 1) a published IS always bumps feature-macro values (this won't help > now, it's a future fix, we don't currently do this in WG21)
This is mostly already the case. I haven't seen any need to bump the values. > 2) an implementation uses the pre-IS draft values before it deems itself > stable Before the IS is stable? From what I've seen so far, the macros are always around the month of the latest draft of a given feature. So if an implementation implemented an earlier draft, the macro version would increase in a new draft coming before the IS. I think we just need to be careful of updates done after the latest draft is adopted, usually by NBs. Those have to bump the macro too. I think you're in good speaking terms with the Finland NB :-) > 3) users who want stability should require the feature-testing macro > to have at least the IS value True. That's not the stability I was talking about, but it could be done. > 4) adventurous users can either use the macro without checking its > value, or use at least the value that gives them > whatever shiny toy they're interested in Fair enough. Please note I am not talking about the stability of the feature as described in the standard or a proposal or draft. I am talking about the stability of the implementation. C++20 is out and the atomic-wait feature is stable, as defined by the standard. What isn't stable is GCC's implementation of it. 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 -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel DPG Cloud Engineering