Title
indirectly_readable_traits should be SFINAE-friendly for all types
Status
c++23
Section
[readable.traits]
Submitter
Christopher Di Bella

Created on 2021-04-08.00:00:00 last changed 12 months ago

Messages

Date: 2021-06-07.16:58:04

Proposed resolution:

This wording is relative to N4885.

  1. Modify [readable.traits] p1 as indicated:

    […]
    template<class T>
      concept has-member-value-type = requires { typename T::value_type; }; // exposition only
    
    template<class T>
      concept has-member-element-type = requires { typename T::element_type; }; // exposition only
    
    template<class> struct indirectly_readable_traits { };
    
    […]
    
    template<has-member-value-type T>
    struct indirectly_readable_traits<T>
      : cond-value-type<typename T::value_type> { };
    
    template<has-member-element-type T>
    struct indirectly_readable_traits<T>
      : cond-value-type<typename T::element_type> { };
    
    template<has-member-value-type T>
      requires has-member-element-type<T>
    struct indirectly_readable_traits<T> { };
      
    template<has-member-value-type T>
      requires has-member-element-type<T> &&
               same_as<remove_cv_t<typename T::element_type>, remove_cv_t<typename T::value_type>>
    struct indirectly_readable_traits<T>
      : cond-value-type<typename T::value_type> { };
    […]
    
Date: 2021-06-07.00:00:00

[ 2021-06-07 Approved at June 2021 virtual plenary. Status changed: Voting → WP. ]

Date: 2021-04-15.00:00:00

[ 2021-04-20; Reflector poll ]

Set status to Tentatively Ready after seven votes in favour during reflector poll.

Date: 2021-04-08.00:00:00

Following the outcome of LWG 3446, a strict implementation of std::indirectly_readable_traits isn't SFINAE-friendly for types that have different value_type and element_type members due to the ambiguity between the has-member-value-type and has-member-element-type specialisations. Other traits types are empty when requirements aren't met; we should follow suit here.

History
Date User Action Args
2023-11-22 15:47:43adminsetstatus: wp -> c++23
2021-06-07 16:58:04adminsetmessages: + msg11906
2021-06-07 16:58:04adminsetstatus: voting -> wp
2021-05-26 21:11:22adminsetstatus: ready -> voting
2021-04-20 20:17:54adminsetmessages: + msg11767
2021-04-20 20:17:54adminsetstatus: new -> ready
2021-04-10 18:42:01adminsetmessages: + msg11763
2021-04-08 00:00:00admincreate