West Indies fell 23 runs short of a record World Cup run chase despite a magnificent 118 from Nicholas Pooran against Sri Lanka at Chester-le-Street.
Set 339 after a maiden century from Sri Lanka's Avishka Fernando, the Windies were 84-4 in the 18th over.
Pooran played some swashbuckling shots, ably supported by Fabian Allen (51).
Yet with 31 needed from the last three overs, Pooran was caught behind as West Indies closed on 315-9, Lasith Malinga claiming 3-55.
Both teams began the match knowing they could not qualify for the semi-finals but produced a classic encounter.
When Carlos Brathwaite was the sixth West Indies wicket to fall, run out at the non-striker's end by the slightest of deflections, 140 runs were still needed.
Allen reached his half-century from just 30 balls to add 83 inside 10 overs with Pooran – but he refused his partner's call for a single and was run out with 57 required from 35 balls.
Sri Lanka's pace spearhead Malinga, who earlier had two catches dropped off his bowling in one over, then saw Pooran offer a straightforward chance to long-off on 108, but substitute fielder Thisara Perera misjudged it horrendously and it went for four.
However, former Sri Lanka skipper Angelo Mathews was introduced for his first bowl of the tournament and his opening delivery – an inviting ball wide of off stump – was edged to the keeper by Pooran.
Sri Lanka 338-6 (50 overs): Fernando 104, Holder 2-59
West Indies 315-9 (50 overs): Pooran 118, Malinga 3-55
Sri Lanka won by 23 runs