#17 Doomista
Tohle řešení funguje pouze pro kopírovatelné objekty a objekty které mají default konstruktor. Referenci nelze přiřadit, pouze inicializovat. Takže aby to fungovalo, musíte si nejdříve vytvořit prázdnou instanci navraceného objektu a v get metodě do ní přiřadit.
Tohle je strašně velké omezení, aby se to dalo považovat za obecně platné řešení. Automaticky jste tak totiž vyřadil objekty, které se kopírovat neumí. Což jsou například všechny polymorfní typy, které dělat kopírovatelné je cesta do pekla. Navíc u polymorfních typů dopředu nevíte, jakou konkrétní implementaci vám to vrátí, takže ani nejste schopný udělat dopředu prázdnou instanci.
std::pair asi fungovat bude, dokud si vystačíte s jeho kopírovacím konstruktorem. Jakmile budete potřebovat přiřazení, dostanete se do problému, protože reference nejde přiřazovat.
Suma sumárum, pořád se domnívám, že nejlepší obecné řešení, pokud nenalezený objekt není chyba, je vrátit ukazatel (normální nebo smart, pokud by se předávalo vlastnictví). Pokud je chyba, vracet referenci a vyhazovat výjimku.