Декомпозиция кортежей в декларативном стиле:
my_tuple t(1, 2.0, 'x'); // кортеж произвольного типа my_tuple
int a; float b; char c; // переменные, в которые хотим распаковать
decomposed(t) = a, b, c; // присваивание (задом наперёд, т.к. C++ не даёт реализовать "=" снаружи класса,
// самая удачная из возможных "прямая" нотация - std::tie(a, b, c) = ...)
Для работы требуется задать правила декомпозиции (в данном случае - класса my_tuple
):
DECOMPOSER_RULE(my_tuple, 0, int, const my_tuple& t, t.a)