Say there are two functions:
void ff( const std::tuple ) { }
template < typename TT >
void gg( const std::tuple
The first question is if this fits with the C++11 standard, and if it doesn't, then why?
This is expected behaviour. In the second case template argument deduction fails because there is no T
so that tuple<const T&>
becomes tuple<int&>
.
In the first case it works because tuple<int&>
is implicitly convertible to tuple<const int&>
. This is a user-defined conversion and as such not considered during template argument deduction.
Your questions smells a bit like an X/Y problem. Consider posting the real question that made you look for a solution involving this kind of function template/tuple combination.
Your ctie
function template looks fine. But keep in mind that things like
auto t = ctie(5);
will basically produce a dangling reference. So, you might want to restrict ctie
to lvalues only.