// 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-weak

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>();
}
