blob: aecec5b93a9b0b8f810a95597bf69168baabe2aa [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
typedef F<X> = X Function(X);
extension<X> on X {
X m<Y extends F<X>>() => this;
}
void test1() {
g() {
if (2 > 1) return 1;
return null;
}
g.m<F<int? Function()>>();
g.m<F<int? Function()>>;
g.m<F<int Function()>>();
//^
// [cfe] Type argument 'int Function() Function(int Function())' doesn't conform to the bound 'int? Function() Function(int? Function())' of the type variable 'Y' on 'm'.
// ^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
g.m<F<int Function()>>;
// ^
// [cfe] Type argument 'int Function() Function(int Function())' doesn't conform to the bound 'int? Function() Function(int? Function())' of the type variable 'Y' on 'int? Function() Function<Y extends int? Function() Function(int? Function())>()'.
// ^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
}
void test2(int? h()) {
h.m<F<int? Function()>>();
h.m<F<int? Function()>>;
h.m<F<int Function()>>();
//^
// [cfe] Type argument 'int Function() Function(int Function())' doesn't conform to the bound 'int? Function() Function(int? Function())' of the type variable 'Y' on 'm'.
// ^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
h.m<F<int Function()>>;
// ^
// [cfe] Type argument 'int Function() Function(int Function())' doesn't conform to the bound 'int? Function() Function(int? Function())' of the type variable 'Y' on 'int? Function() Function<Y extends int? Function() Function(int? Function())>()'.
// ^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
}