From 0b1eca341656b83e6081f6bea74b392c0c5dcbbd Mon Sep 17 00:00:00 2001 From: Vladimir Shaleev Date: Sat, 24 Feb 2024 13:00:59 +0300 Subject: [PATCH] Add IPADDRESS_CONSTEVAL --- doc/Doxyfile.in | 1 + include/ipaddress/config.hpp | 6 ++++++ include/ipaddress/ip-address-base.hpp | 2 +- include/ipaddress/ip-any-address.hpp | 4 ++-- include/ipaddress/ip-any-network.hpp | 4 ++-- include/ipaddress/ip-network-base.hpp | 2 +- include/ipaddress/ipv4-address.hpp | 4 ++-- include/ipaddress/ipv4-network.hpp | 2 +- include/ipaddress/ipv6-address.hpp | 2 +- include/ipaddress/ipv6-network.hpp | 2 +- 10 files changed, 18 insertions(+), 11 deletions(-) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 96eacbf5..fee7ac1b 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -2472,6 +2472,7 @@ PREDEFINED = "IPADDRESS_FORCE_INLINE=\"inline\"" \ "IPADDRESS_CONSTEXPR=\"constexpr\"" \ "IPADDRESS_CONSTEXPR_14=\"constexpr\"" \ "IPADDRESS_CONSTEXPR_17=\"constexpr\"" \ + "IPADDRESS_CONSTEVAL=\"consteval\"" \ "IPADDRESS_CPP_VERSION=\"20\"" \ "IPADDRESS_NONTYPE_TEMPLATE_PARAMETER=\"1\"" \ "IPADDRESS_IPV6_SCOPE_MAX_LENGTH=IPADDRESS_IPV6_SCOPE_MAX_LENGTH" \ diff --git a/include/ipaddress/config.hpp b/include/ipaddress/config.hpp index ce3e436e..3ae98a8e 100644 --- a/include/ipaddress/config.hpp +++ b/include/ipaddress/config.hpp @@ -70,6 +70,12 @@ # error ipaddress needs at least C++ standard version 11 #endif +#if __GNUC__ <= 9 && !defined(__llvm__) && !defined(__INTEL_COMPILER) +# define IPADDRESS_CONSTEVAL IPADDRESS_CONSTEXPR +#else +# define IPADDRESS_CONSTEVAL consteval +#endif + #if defined(_MSC_VER) && (_MSC_VER <= 1800) # define IPADDRESS_NOEXCEPT #else diff --git a/include/ipaddress/ip-address-base.hpp b/include/ipaddress/ip-address-base.hpp index f0261f70..f0cb4235 100644 --- a/include/ipaddress/ip-address-base.hpp +++ b/include/ipaddress/ip-address-base.hpp @@ -123,7 +123,7 @@ class ip_address_base : public Base { * @remark If parsing fails, an error will be raised at compile time. */ template - IPADDRESS_NODISCARD static consteval IPADDRESS_FORCE_INLINE ip_address_base parse() IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD static IPADDRESS_CONSTEVAL IPADDRESS_FORCE_INLINE ip_address_base parse() IPADDRESS_NOEXCEPT { constexpr auto str = FixedString; auto code = error_code::NO_ERROR; auto index = 0; diff --git a/include/ipaddress/ip-any-address.hpp b/include/ipaddress/ip-any-address.hpp index bcd43a12..580ae611 100644 --- a/include/ipaddress/ip-any-address.hpp +++ b/include/ipaddress/ip-any-address.hpp @@ -486,7 +486,7 @@ class ip_address { * @remark If parsing fails, an error will be raised at compile time. */ template - IPADDRESS_NODISCARD static consteval IPADDRESS_FORCE_INLINE ip_address parse() IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD static IPADDRESS_CONSTEVAL IPADDRESS_FORCE_INLINE ip_address parse() IPADDRESS_NOEXCEPT { constexpr auto str = FixedString; auto code = error_code::NO_ERROR; @@ -1350,7 +1350,7 @@ class ip_address { * @return An ip_address object parsed from the fixed string. */ template - IPADDRESS_NODISCARD consteval IPADDRESS_FORCE_INLINE ip_address operator""_ip() IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD IPADDRESS_CONSTEVAL IPADDRESS_FORCE_INLINE ip_address operator""_ip() IPADDRESS_NOEXCEPT { return ip_address::parse(); } diff --git a/include/ipaddress/ip-any-network.hpp b/include/ipaddress/ip-any-network.hpp index fcbf687e..df096f79 100644 --- a/include/ipaddress/ip-any-network.hpp +++ b/include/ipaddress/ip-any-network.hpp @@ -282,7 +282,7 @@ class ip_network { #ifdef IPADDRESS_NONTYPE_TEMPLATE_PARAMETER template - IPADDRESS_NODISCARD static consteval IPADDRESS_FORCE_INLINE ip_network parse() IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD static IPADDRESS_CONSTEVAL IPADDRESS_FORCE_INLINE ip_network parse() IPADDRESS_NOEXCEPT { constexpr auto str = FixedString; auto code = error_code::NO_ERROR; @@ -529,7 +529,7 @@ class ip_network { #ifdef IPADDRESS_NONTYPE_TEMPLATE_PARAMETER template - IPADDRESS_NODISCARD consteval IPADDRESS_FORCE_INLINE ip_network operator""_net() IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD IPADDRESS_CONSTEVAL IPADDRESS_FORCE_INLINE ip_network operator""_net() IPADDRESS_NOEXCEPT { return ip_network::parse(); } diff --git a/include/ipaddress/ip-network-base.hpp b/include/ipaddress/ip-network-base.hpp index fd97dedb..6993566e 100644 --- a/include/ipaddress/ip-network-base.hpp +++ b/include/ipaddress/ip-network-base.hpp @@ -62,7 +62,7 @@ class ip_network_base : public Base { * @return A consteval ip network object representing the parsed network. */ template - IPADDRESS_NODISCARD static consteval ip_network_base parse() IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD static IPADDRESS_CONSTEVAL ip_network_base parse() IPADDRESS_NOEXCEPT { constexpr auto str = FixedString; auto code = error_code::NO_ERROR; auto index = 0; diff --git a/include/ipaddress/ipv4-address.hpp b/include/ipaddress/ipv4-address.hpp index 03642cb9..4258fd74 100644 --- a/include/ipaddress/ipv4-address.hpp +++ b/include/ipaddress/ipv4-address.hpp @@ -124,7 +124,7 @@ using ipv4_address = ip_address_base; * @return An ipv4_address object parsed from the fixed string. */ template - IPADDRESS_NODISCARD consteval IPADDRESS_FORCE_INLINE ipv4_address operator""_ipv4() IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD IPADDRESS_CONSTEVAL IPADDRESS_FORCE_INLINE ipv4_address operator""_ipv4() IPADDRESS_NOEXCEPT { return ipv4_address::parse(); } @@ -134,7 +134,7 @@ using ipv4_address = ip_address_base; * @param[in] value An unsigned long long integer representing the IPv4 address in *host byte order*. * @return An ipv4_address object created from the integer. */ - IPADDRESS_NODISCARD consteval IPADDRESS_FORCE_INLINE ipv4_address operator""_ipv4(unsigned long long value) IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD IPADDRESS_CONSTEVAL IPADDRESS_FORCE_INLINE ipv4_address operator""_ipv4(unsigned long long value) IPADDRESS_NOEXCEPT { assert(value <= ipv4_address::base_all_ones && "literal integer is too long"); return ipv4_address::from_uint(uint32_t(value)); } diff --git a/include/ipaddress/ipv4-network.hpp b/include/ipaddress/ipv4-network.hpp index c24a03c2..d231a427 100644 --- a/include/ipaddress/ipv4-network.hpp +++ b/include/ipaddress/ipv4-network.hpp @@ -25,7 +25,7 @@ using ipv4_network = ip_network_base; #ifdef IPADDRESS_NONTYPE_TEMPLATE_PARAMETER template - IPADDRESS_NODISCARD consteval IPADDRESS_FORCE_INLINE ipv4_network operator""_ipv4_net() IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD IPADDRESS_CONSTEVAL IPADDRESS_FORCE_INLINE ipv4_network operator""_ipv4_net() IPADDRESS_NOEXCEPT { return ipv4_network::parse(); } diff --git a/include/ipaddress/ipv6-address.hpp b/include/ipaddress/ipv6-address.hpp index c7db9726..eaf40d5f 100644 --- a/include/ipaddress/ipv6-address.hpp +++ b/include/ipaddress/ipv6-address.hpp @@ -833,7 +833,7 @@ using ipv6_address = ip_address_base; * @return An ipv6_address object parsed from the fixed string. */ template - IPADDRESS_NODISCARD consteval IPADDRESS_FORCE_INLINE ipv6_address operator""_ipv6() IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD IPADDRESS_CONSTEVAL IPADDRESS_FORCE_INLINE ipv6_address operator""_ipv6() IPADDRESS_NOEXCEPT { return ipv6_address::parse(); } diff --git a/include/ipaddress/ipv6-network.hpp b/include/ipaddress/ipv6-network.hpp index 28c6c528..bb8eb275 100644 --- a/include/ipaddress/ipv6-network.hpp +++ b/include/ipaddress/ipv6-network.hpp @@ -32,7 +32,7 @@ using ipv6_network = ip_network_base; #ifdef IPADDRESS_NONTYPE_TEMPLATE_PARAMETER template - IPADDRESS_NODISCARD consteval IPADDRESS_FORCE_INLINE ipv6_network operator""_ipv6_net() IPADDRESS_NOEXCEPT { + IPADDRESS_NODISCARD IPADDRESS_CONSTEVAL IPADDRESS_FORCE_INLINE ipv6_network operator""_ipv6_net() IPADDRESS_NOEXCEPT { return ipv6_network::parse(); }