Title
The element_type definition of scaled_accessor and conjugated_accessor are not quite right
Status
new
Section
[linalg.scaled.scaledaccessor] [linalg.conj.conjugatedaccessor]
Submitter
Hewill Kang

Created on 2026-04-08.00:00:00 last changed 1 week ago

Messages

Date: 2026-05-29.08:44:59

Proposed resolution:

This wording is relative to N5032.

  1. Modify [linalg.scaled.scaledaccessor] as indicated:

    namespace std::linalg {
      template<class ScalingFactor, class NestedAccessor>
      class scaled_accessor {
      public:
        using element_type =
          const decltype(declval<const ScalingFactor&>() * 
                         typename declval<NestedAccessor::element_type>(
                            declval<typename NestedAccessor::reference>()));
        […]
      };
    }
    
  2. Modify [linalg.conj.conjugatedaccessor] as indicated:

    namespace std::linalg {
      template<class NestedAccessor>
      class scaled_accessor {
      public:
        using element_type =
          const decltype(conj-if-needed(
                           typename declval<NestedAccessor::element_type>(
                             declval<typename NestedAccessor::reference>())));
        […]
      };
    }
    
Date: 2026-05-15.00:00:00

[ 2026-05-29; Reflector poll. ]

Set priority to 3 after reflector poll.

We spell explicit requirments on validity of `NestedAccessor::element_type` construction, and do not include it in the alias definition.

Date: 2026-04-08.00:00:00

The scaled_accessor defines element_type as const decltype(declval<ScalingFactor>() * ...), but its access returns (scaling_factor() * ...), where scaling_factor() returns const ScalingFactor&.

Furthermore, both scaled_accessor and conjugated_accessor's access construct NestedAccessor::element_type via nested-accessor.access(p, i), but this may not be well-formed.

History
Date User Action Args
2026-05-29 08:44:59adminsetmessages: + msg16328
2026-04-11 09:53:42adminsetmessages: + msg16259
2026-04-08 00:00:00admincreate