This is a very short post on something I found while working on a generic Radix Sort.

In C++17, it is now possible to deduce class template arguments:

#include <tuple>
#include <type_traits>

using namespace std;

int main()
	tuple t(4, 3, 2.5); //class template arguments deduction
	static_assert(is_same_v<decltype(t), tuple<int, int, double>>);

This however does not (despite what I initially thought…) make std::make_tuple useless!

In generic code, I had wrote something like:

template<typename... Ts>
auto testFun1(Ts... v)
	return tuple{v...};

instead of

template<typename... Ts>
auto testFun2(Ts... v)
	return make_tuple(v...);

The actual piece of code was extracting the tail of a tuple: From a tuple t1, I wanted to get a tuple t2 = t1 with std::get<0>(t1) removed from it.


testFun1(tuple{0.0, 1}) returns a tuple<double, int>.


testFun2(tuple{0.0, 1}) returns a tuple<tuple<double, int>>!

Moral of the story: extensive unit tests are nice!

Next posts will be on radix sort itself.


Class template argument deduction
radix sort

Written on July 11, 2017