I'm starting to add [[nodiscard]]
, [[noreturn]]
and [[fallthrough]]
to my code base, but I still worry the code might need to be used on an older C++ version.
I'm only worried about g++, clang, and Visual Studio.
To be safe should I make every single usage depend on a version check for the exact version it appeared? Or, do these compilers accept (or does the spec even mandate they accept) any [[
attribute]]
even if unknown, starting with C++11?
Were these allowed and ignored (or supported) even before C++11? (I ask not what the spec says but what the software actually did.)
#if __cplusplus >= 201703L
#define MyNamespace_NoReturnCPP17 [[noreturn]]
#else
#define MyNamespace_NoReturnCPP17
#endif
(Off subject but if I were on the C++ committee, I'd re-use the case
keyword to do the same thing as switch
, when followed by (
, except it would in effect have an automatic break
before each case
label. And within the case
's block (and nowhere else), fallthrough
would be accepted as a keyword, that suppresses that automatic break
.)
Aucun commentaire:
Enregistrer un commentaire