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.