Я немного озадачен следующим кортежем:
int testint = 1;
float testfloat = .1f;
std::tie( testint, testfloat ) = std::make_tuple( testint, testfloat );
std::tuple<int&, float&> test = std::make_tuple( testint, testfloat );
С std::tie
он работает, но привязка непосредственно к кортежу ссылок не компилируется, давая
": преобразование из 'std:: tuple < int, float > в нескалярный тип' std:: tuple < int &, float & > запрошено"
или
"нет подходящего пользовательского преобразования из std:: tuple < int, float > в std:: tuple < int &, float & > "
Почему? Я дважды проверял с помощью компилятора, если он действительно тот же тип, которому назначается, делая это:
static_assert( std::is_same<decltype( std::tie( testint, testfloat ) ), std::tuple<int&, float&>>::value, "??" );
Что оценивается как истина.
Я также проверил онлайн, чтобы узнать, может ли это быть ошибкой msvc, но все компиляторы дают тот же результат.