 /*
 * Copyright (c) 2019, 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.
 */
/**
 * @assertion The default bound of generic type parameters is treated as
 * [Object?].
 * @description Check that default type parameter of the generic function type
 * alias is treated as [Object?] statically. Typedef is in the form:
 *    [typedef <type> <identifier> <formalParameterPart>].
 *
 * @Issue 40367, 40368
 * @author iarkh@unipro.ru
 */
 // Requirements=nnbd-strong

import "../../Utils/expect.dart";

typedef T    Function1<T>( );
typedef void Function2<T>(T);
typedef T    Function3<T>(T);
typedef void Function4<T>( );

typedef T1 Function5<T1, T2, T3>(T2, T3);

F<Function1<Object?>>? test1(Function1 source) {
  var fsource = toF(source);
  return fsource;
}

F<Function2<Object?>>? test2(Function2 source) {
  var fsource = toF(source);
  return fsource;
}

F<Function3<Object?>>? test3(Function3 source) {
  var fsource = toF(source);
  return fsource;
}

F<Function4<dynamic>>? test4(Function4 source) {
  var fsource = toF(source);
  return fsource;
}

 F<Function5<Object?, Object?, Object?>>? test5(Function5 source) {
   var fsource = toF(source);
   return fsource;
 }

void main() {
  print(test1);
  print(test2);
  print(test3);
  print(test4);
  print(test5);
}
