This patch contains two fixes issues arising around __tuple_leafs converting constructor.
- The first problem is that __tuple_leaf<T> uses is_constructible<T, U> to enable/disable it's converting constructor __tuple_leaf(U &&). Evaluating is_constructible under certain conditions can cause a hard compile error. Currently is_constructible<T, __tuple_leaf> is evaluated whenever __tuple_leaf is copied or moved. This patch prevents that from happening by only evaluating is_constructible when U != __tuple_leaf.
- The second problem is that __tuple_leaf's specialization for empty types does have an implicitly generated move constructor because it declares a deleted assignment operator.
This causes the converting to be constructor during moves. The problem is solved by disabling the constructor when U == __tuple_leaf and giving __tuple_leaf a defaulted move constructor (so the defaulted copy constructor is not called).
There is also a small fix to two tests that needed extra brackets around an assert macro.