mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 08:21:05 +01:00
Within the type of an associated constant, references to `.Self` should resolve symbolically to that associated constant as a `GenericBinding` so that it can be substituted for the actual value when using its type. However, when the associated constant is referenced from elsewhere in the same interface, the value we want is a symbolic value naming the constant as a member of `Self`.
28 lines
857 B
Plaintext
28 lines
857 B
Plaintext
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
// AUTOUPDATE
|
|
// RUN: %{not} %{explorer-run}
|
|
// RUN: %{not} %{explorer-run-trace}
|
|
|
|
package ExplorerTest api;
|
|
|
|
interface X(T:! Type) {}
|
|
|
|
interface Y(T:! Type) {
|
|
let M:! X(T);
|
|
}
|
|
|
|
interface Z {
|
|
// We reject this even though it is the responsibility of the `impl as Z` to
|
|
// provide a type `N` such that `i32 is X(N)`. We might want to treat this as
|
|
// an implied constraint and allow this in the future.
|
|
// CHECK:STDERR: COMPILATION ERROR: {{.*}}/explorer/testdata/assoc_const/fail_implied_constraints.carbon:[[@LINE+1]]: could not find implementation of interface X(T = N) for i32
|
|
let N:! Y(.Self) where .M = i32;
|
|
}
|
|
|
|
fn Main() -> i32 {
|
|
return 0;
|
|
}
|