inline fun <reified T : Any?> T.foo(): T {
  return <this> as T
}

inline fun <reified T : Any?> T.fooN(): T? {
  return <this> as T?
}

fun test() {
  val nullStr: @FlexibleNullability String? = nullString()
  val nonnullStr: @FlexibleNullability String? = nonnullString()
  foo<@FlexibleNullability String?>(/* <this> = nullStr */) /*~> Unit */
  foo<@FlexibleNullability String?>(/* <this> = nonnullStr */) /*~> Unit */
  fooN<@FlexibleNullability String?>(/* <this> = nullStr */) /*~> Unit */
  fooN<@FlexibleNullability String?>(/* <this> = nonnullStr */) /*~> Unit */
}

