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-04-11.09:53:42

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-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-04-11 09:53:42adminsetmessages: + msg16259
2026-04-08 00:00:00admincreate