diff --git a/src/libs/utils/algorithm.h b/src/libs/utils/algorithm.h index 61a0a5d10f9..0867bfc2b41 100644 --- a/src/libs/utils/algorithm.h +++ b/src/libs/utils/algorithm.h @@ -211,6 +211,9 @@ inserter(QSet &container) template using decay_t = typename std::decay::type; +template +using result_of_t = typename std::result_of::type; + // abstraction to treat Container and QStringList similarly template struct ContainerType @@ -220,26 +223,13 @@ struct ContainerType // specialization for qt container T_Container template class T_Container, typename T_Type> -struct ContainerType> { - typedef T_Type ElementType; - - template - struct WithElementType - { - typedef T_Container type; - }; - +struct ContainerType> +{ template class C = T_Container> - struct ResultOfTransform - { - typedef C::type>> type; - }; + using ResultOfTransform = C>>; template - struct ResultOfTransformPMF - { - typedef typename WithElementType>::type type; - }; + using ResultOfTransformPMF = T_Container>; }; // specialization for QStringList @@ -280,10 +270,10 @@ template Q_REQUIRED_RESULT auto transform(const C &container, F function) --> typename ContainerType::template ResultOfTransform::type +-> typename ContainerType::template ResultOfTransform { return TransformImpl< - typename ContainerType::template ResultOfTransform::type, + typename ContainerType::template ResultOfTransform, C >::call(container, function); } @@ -294,10 +284,10 @@ template Q_REQUIRED_RESULT auto transform(const C &container, R (S::*p)() const) - ->typename ContainerType::template ResultOfTransformPMF::type + ->typename ContainerType::template ResultOfTransformPMF { return TransformImpl< - typename ContainerType::template ResultOfTransformPMF::type, + typename ContainerType::template ResultOfTransformPMF, C >::call(container, p); } @@ -308,10 +298,10 @@ template class C, // result container type typename F> // function type Q_REQUIRED_RESULT auto transform(const SC &container, F function) - -> typename ContainerType::template ResultOfTransform::type + -> typename ContainerType::template ResultOfTransform { return TransformImpl< - typename ContainerType::template ResultOfTransform::type, + typename ContainerType::template ResultOfTransform, SC >::call(container, function); }