Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

P3050R2: LEWG review 2024-08-27 and 2024-09-03 #471

Open
mhoemmen opened this issue Sep 3, 2024 · 0 comments
Open

P3050R2: LEWG review 2024-08-27 and 2024-09-03 #471

mhoemmen opened this issue Sep 3, 2024 · 0 comments

Comments

@mhoemmen
Copy link
Contributor

mhoemmen commented Sep 3, 2024

LEWG review of P3050R2

LEWG started reviewing P3050R2 (Fix C++26 by optimizing linalg::conjugated for noncomplex value types) on 2024-08-27 but didn't finish.

Summary of LEWG's 2024-08-27 discussion

Definition of a (non)complex number type

P3050 follows [linalg], specifically conj-if-needed(E), which is defined as

  1. ADL-found conj(E) if type of E is not an arithmetic type, else
  2. E.

conj already is not ADL-findable for double, etc., which is what we want anyway.

Custom real types and conj

What happens if a user defines conj for their custom real type?

Results will be mathematically correct if user defined it mathematically correctly.

  • Best case: return type same as input type: custom_real conj(const custom_real&)

    • Avoids mixed-type computations if all matrices and vectors are custom_real
  • Worst case: user imitates std::conj by defining custom_complex<custom_real> conj(custom_real)

    • Code may fail to compile if user did not define the right mixed arithmetic operators and/or implicit conversions (but that's the user's fault; they did ask for conjugate_transposed(A))

    • Users are already outside the space of typical std::linalg optimizations. Best they can expect is std::execution::par_unseq.

    • Users may have custom linear algebra algorithms and may use them with std::linalg::conjugated and/or std::linalg::conjugate_transposed, though.

Consider a follow-on proposal to deprecate and replace std::conj

I am not bothered if users write a custom real number type and they define ADL-findable conj to return the custom complex of their real type because that’s weird.... The existing behavior of the Standard is broken. Anyone who works with complex numbers hates this.

  • Consider a follow-on proposal to deprecate std::conj and define a new std::conjugate more rationally

  • Should this wait for language support for customization points?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant