diff --git a/include/boost/describe/detail/config.hpp b/include/boost/describe/detail/config.hpp index fdc75ea..b2aa615 100644 --- a/include/boost/describe/detail/config.hpp +++ b/include/boost/describe/detail/config.hpp @@ -45,6 +45,17 @@ #define BOOST_DESCRIBE_INLINE_CONSTEXPR BOOST_DESCRIBE_INLINE_VARIABLE BOOST_DESCRIBE_CONSTEXPR_OR_CONST +#if __cplusplus >= 201703L || ( defined(_MSVC_LANG) && _MSVC_LANG >= 201703L ) + +# define BOOST_DESCRIBE_CXX17_CONSTEXPR constexpr +# define BOOST_DESCRIBE_HAS_CXX17_CONSTEXPR + +#else + +# define BOOST_DESCRIBE_CXX17_CONSTEXPR + +#endif + #if __cplusplus >= 202002L || ( defined(_MSVC_LANG) && _MSVC_LANG >= 202002L ) # define BOOST_DESCRIBE_CXX20 diff --git a/include/boost/describe/enum_to_string.hpp b/include/boost/describe/enum_to_string.hpp index b06e3ac..a828bdb 100644 --- a/include/boost/describe/enum_to_string.hpp +++ b/include/boost/describe/enum_to_string.hpp @@ -23,7 +23,7 @@ namespace describe { template> -char const * enum_to_string( E e, char const* def ) noexcept +BOOST_DESCRIBE_CXX17_CONSTEXPR char const * enum_to_string( E e, char const* def ) noexcept { char const * r = def; diff --git a/test/enum_to_string_test.cpp b/test/enum_to_string_test.cpp index 0ac2576..1dbddc9 100644 --- a/test/enum_to_string_test.cpp +++ b/test/enum_to_string_test.cpp @@ -35,6 +35,10 @@ int main() BOOST_TEST_CSTR_EQ( enum_to_string( E4::v4, "" ), "v4" ); BOOST_TEST_EQ( enum_to_string( static_cast( 14 ), 0 ), static_cast( 0 ) ); +#if defined(BOOST_DESCRIBE_HAS_CXX17_CONSTEXPR) + static_assert(enum_to_string(E2::v2, "")[1] == '2'); + static_assert(enum_to_string(static_cast(10), "")[0] == 0); +#endif return boost::report_errors(); }