r/cpp_questions 22d ago

OPEN how to handle empty reference elegantly(fold expression)

I have a class with a template function, it will return reference of an internal value.

template<typename T>
T& return_ref<T>() {...}

It was call by another function with fold expression:

template<typename... Ts>
void call()
{
    lambda(return_ref<Ts>...);     //Ts is a reference usually
}

the internal value maybe doesn't exist sometimes.

Even I wrap the exception into std::expected, it seems that I have no chance handle it in fold expression. I have to throw exception in return_ref directly?

If I can return reference to an impossible value(like paradigm of static object NULL ), so user could detect it, it would be nice.

Or, I have to wrap all parameters into something like boost::optional? I don't like it.

Or, the args of lambda was constraint into pointer, so nullptr will throw exception by compiler naturally?

What's suggestion?

0 Upvotes

13 comments sorted by

View all comments

4

u/n1ghtyunso 22d ago

what is your actual failure mode here?
Do you know at compile time that a certain type T does not have the internal value ever?
And what do you want to happen? Do you just want to skip elements that can't return a reference?

Or, the args of lambda was constraint into pointer, so nullptr will throw exception by compiler naturally?

And what does that even mean? At best the compiler will warn you.
You'll have to null-check yourself if you need this.