Same idea is this suggestion, but better: instead of throwing - set a variable.
bool r = false; std::call_once(flag,{r = true;}); return r;