Лучший способ сделать это - использовать макросы функционального тестирования в составе SD-6 .Изменение в том, что constexpr
функции-члены неявно const
помечены как __cpp_constexpr
со значением 201304
.Так что это должен быть ваш тест:
class Foo {
#if __cpp_constexpr >= 201304L
constexpr
#endif
int baz(const Bar& bar);
};
Что, если вы делаете это для более чем одной функции-члена, вы, вероятно, захотите обобщить так:
#if __cpp_constexpr >= 201304L
# define CONSTEXPR_MEM constexpr
#else
# define CONSTEXPR_MEM
#endif
class Foo {
CONSTEXPR_MEM int baz(const Bar& bar);
};
То, как вы представляете это ввопрос (с использованием __cplusplus
) совершенно верен - преимущество макросов тестирования возможностей заключается в том, что разные компиляторы принимают различные функции на разных этапах, поэтому вы можете получить более детальный и точный тест.В дальнейшем все основные поставщики согласились с тем, что SD-6 - правильное направление, и это будет способ делать что-то в будущем.
Обратите внимание, что существует нет способ выразитьэто без препроцессора.Там нет условного constexpr
.Есть только constexpr
.