libstdc++: Use concepts and conditional explicit in std::optional
For C++20 mode we can improve compile times by using conditional
explicit to reduce the number of constructor overloads. We can also use
requires-clauses instead of SFINAE to implement constraints on the
constructors and assignment operators.
libstdc++-v3/ChangeLog:
* include/std/optional (optional): Use C++20 features to
simplify overload sets for constructors and assignment
operators.