Я ожидал, что этот код будет работать, но он не компилируется:
#include <tuple>
struct S
{
int x = 0;
int y() const { return 1; }
};
bool f(const S& a, const S& b)
{
return std::tie(a.x, a.y()) < std::tie(b.x, b.y());
}
GCC 9 говорит:
ошибка: невозможно связать неконстантную ссылку lvalue типа 'int & 'to rvalue типа' int '
return std::tie(a.x, a.y()) < std::tie(b.x, b.y());
~~~^~
Что не так с кодом, как его можно исправить и почему?Я пытаюсь написать краткую функцию сравнения, и обычно std::tie
поддерживает это (действительно, это пример использования учебника для std::tie
).
Демонстрация: https://godbolt.org/z/cWbQC0