Given the following function:
use std::io::{BufRead, stdin};
fn foo() -> usize {
let stdin = stdin();
let stdinlock = stdin.lock();
stdinlock
I cannot answer the why of your question, but I can state that the current1 implementation of non-lexical lifetimes allows the original code to compile:
#![feature(nll)]
use std::io::{BufRead, stdin};
fn foo() -> usize {
let stdin = stdin();
let stdinlock = stdin.lock();
stdinlock
.lines()
.count()
}
Playground
1 1.25.0-nightly (2018-01-11 73ac5d6)