Friday, 16 October 2015

Cool usecase for std::tie()


Until now I only thought of std::tie()as useful for decomposing several return values of a function that is faking multiple return values by using std:tuple:
1
2
3
4
bool a;
SomeData b;
 
std:tie(a, b) = get_a_b_as_tuple();
But now look at that:
1
2
3
4
5
6
7
8
9
10
11
12
13
structS
{
  int n;
  std::string s;
  float d;
 
  bool operator<(const S& rhs) const {
    // compares n to rhs.n,
    // then s to rhs.s,
    // then d to rhs.d
    return std::tie(n, s, d) < std::tie(rhs.n, rhs.s, rhs.d);
  }
};
Nice, isn't it?

Source: CppCon2015 / Presentations / Simple Extensible Pattern Matching With C++14.

Update:
As it seems, this technique is considered to be pretty standard now, look here. If you are interested in TMP (and param pack expansions ;) you'll find there some techniques to make such comparators more flexible.