Due to recent stabilizations of const integer arithmetic and const control flow, all methods of types std::net::IpAddr, Ipv4Addr, and Ipv6Addr can be made const. This issue provides an overview of all methods and steps that need to be taken:
Ipv4Addr
Methods already stable const:
Methods unstable const by PR#76142 (const_ipv4):
octets
is_loopback
is_private
is_link_local
is_shared (unstable)
is_ietf_protocol_assignment (unstable)
is_benchmarking (unstable)
is_multicast
is_documentation
is_global (unstable)
is_reserved (unstable)
is_broadcast
to_ipv6_compatible (deprecated?)
to_ipv6_mapped
None of these methods depends on an unstable feature, and could all thus be made stable const.
Ipv6Addr
Methods already stable const:
new (uses #[allow_internal_unstable(const_fn_transmute)])
octets
Ipv6Addr::segments has been made unstable const in PR#76206 (const_ipv6), together with all dependent methods:
segments
is_unspecified
is_loopback
is_global (unstable)
is_unique_local (unstable)
is_unicast_link_local_strict (unstable)
is_documentation (unstable)
multicast_scope (unstable)
is_multicast
to_ipv4_mapped (unstable)
to_ipv4
All of these methods depend on segments, and thus upon the unstable feature const_fn_transmute, however the transmute is only used for better code generation, the operations could be rewritten equivalently using stable const code.
IpAddr
The following methods are stable const:
Implemented in PR#76226.
With the relevant methods of Ipv4Addr and Ipv6Addr made const, the following were also made unstable const in PR#76304:
is_documentation (unstable)
is_global (unstable)
is_loopback
is_multicast
is_unspecified
Due to recent stabilizations of const integer arithmetic and const control flow, all methods of types
std::net::IpAddr,Ipv4Addr, andIpv6Addrcan be made const. This issue provides an overview of all methods and steps that need to be taken:Ipv4AddrMethods already stable const:
newis_unspecifiedMethods unstable const by PR#76142 (
const_ipv4):octetsis_loopbackis_privateis_link_localis_shared(unstable)is_ietf_protocol_assignment(unstable)is_benchmarking(unstable)is_multicastis_documentationis_global(unstable)is_reserved(unstable)is_broadcastto_ipv6_compatible(deprecated?)to_ipv6_mappedNone of these methods depends on an unstable feature, and could all thus be made stable const.
Ipv6AddrMethods already stable const:
new(uses#[allow_internal_unstable(const_fn_transmute)])octetsIpv6Addr::segmentshas been made unstable const in PR#76206 (const_ipv6), together with all dependent methods:segmentsis_unspecifiedis_loopbackis_global(unstable)is_unique_local(unstable)is_unicast_link_local_strict(unstable)is_documentation(unstable)multicast_scope(unstable)is_multicastto_ipv4_mapped(unstable)to_ipv4All of these methods depend on
segments, and thus upon the unstable featureconst_fn_transmute, however the transmute is only used for better code generation, the operations could be rewritten equivalently using stable const code.IpAddrThe following methods are stable const:
is_ip4is_ipv6Implemented in PR#76226.
With the relevant methods of
Ipv4AddrandIpv6Addrmade const, the following were also made unstable const in PR#76304:is_documentation(unstable)is_global(unstable)is_loopbackis_multicastis_unspecified