Good work!
I'm also happy to see there's now std::make_integer_sequence in C++14, I didn't know that when I said "similar stuff will be once part of STL" in your previous post!
I only have a couple of comments on top of MorwennMorwenn.
Your
CleanType(in case you don't usestd::decay) could just betemplate<typename Decorated> using CleanType = std::remove_const<typename std::remove_reference<Decorated>::type>;because
- it's standard to use the name
typefor the resulting type rather than a custom name likeBaseType - you don't need
NoRefBase; it's cleaner to usestd::remove_referenceorstd::remove_reference_tdirectly.
- it's standard to use the name
Tuple initialization
ArgumentTupple arguments(row.getValue1<typename std::tuple_element<S, ArgumentTupple>::type>()...);really needs the braces
ArgumentTupple arguments{row.getValue1<typename std::tuple_element<S, ArgumentTupple>::type>()...};because the right order (left-to-right) is only guaranteed in this case (iso 8.5.4/4). Otherwise, it's implementation defined.