This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
element_type definition of scaled_accessor and
conjugated_accessor are not quite rightSection: 29.9.8.2 [linalg.scaled.scaledaccessor], 29.9.9.2 [linalg.conj.conjugatedaccessor] Status: New Submitter: Hewill Kang Opened: 2026-04-08 Last modified: 2026-04-11
Priority: Not Prioritized
View all issues with New status.
Discussion:
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.
Proposed resolution:
This wording is relative to N5032.
Modify 29.9.8.2 [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>()));
[…]
};
}
Modify 29.9.9.2 [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>())));
[…]
};
}