/*
 * Copyright (c) 2020, 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 With sound null safety, all generic const constructors and
 * generic const literals are evaluated using the actual type arguments
 * provided, whether legacy or non-legacy. This ensures that with sound null
 * safety, the final consistent semantics are obeyed.
 *
 * @description Checks statically that actual generic class type parameter is
 * evaluated correctly for [Never] type argument.
 *
 * @author iarkh@unipro.ru
 */
// Requirements=nnbd-strong

import "dart:async";

class A<T> {
  const A();
}

main() {
  const A<int?     > a1  = A<Never>();
  const A<int      > a2  = A<Never>();
  const A<Object?  > a3  = A<Never>();
  const A<Object   > a4  = A<Never>();
  const A<Function?> a5  = A<Never>();
  const A<Function > a6  = A<Never>();
  const A<dynamic  > a7  = A<Never>();
  const A<Null     > a8  = A<Never>();
  const A<void     > a9  = A<Never>();
  const A<Never    > a10 = A<Never>();
  const A<FutureOr > a11 = A<Never>();
}
