as.carbon 558 B

12345678910111213141516171819
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. package Core library "prelude/operators/as";
  5. interface As(Dest:! type) {
  6. fn Convert[self: Self]() -> Dest;
  7. }
  8. interface ImplicitAs(Dest:! type) {
  9. // TODO: extend As(Dest);
  10. fn Convert[self: Self]() -> Dest;
  11. }
  12. // TODO: This should only apply to copyable types.
  13. impl forall [T:! type] T as ImplicitAs(T) {
  14. fn Convert[self: Self]() -> Self { return self; }
  15. }