mclow.lists added a comment.

> The use of iota targeting vector<unsigned char> with an int parameter 
> triggers warnings on MSVC++ assigning an into a unsigned char&

I hate your compiler.

Other than that (and the bit about identity), this looks fine to me.



================
Comment at: 
test/std/numerics/numeric.ops/transform.exclusive.scan/transform_exclusive_scan_init_bop_uop.pass.cpp:31
 
-template <class T = void>
-struct identity : std::unary_function<T, T>
-{
-    constexpr const T& operator()(const T& x) const { return x;}
-};
-
-template <>
-struct identity<void>
-{
-    template <class T>
-    constexpr auto operator()(T&& x) const
-    _NOEXCEPT_(noexcept(_VSTD::forward<T>(x)))
-    -> decltype        (_VSTD::forward<T>(x))
-        { return        _VSTD::forward<T>(x); }
-};
+const auto identity = [](auto&& x) { return std::forward<decltype(x)>(x); };
 
----------------
CaseyCarter wrote:
> Pre-existing: the identity transformation is an extremely poor choice for 
> these `transform_foo` tests since failure to apply the transformation exactly 
> once to each element does not affect the result of the algorithm.
I think I'd rather have this. It's constexpr and noexcept, unlike the lambda.

    struct identity {
        template <typename T>
        constexpr auto operator()(T&& x) const
        noexcept(noexcept(std::forward<T>(x)))
        -> decltype      (std::forward<T>(x))
            { return      std::forward<T>(x); }
    };



================
Comment at: 
test/std/numerics/numeric.ops/transform.exclusive.scan/transform_exclusive_scan_init_bop_uop.pass.cpp:31
 
-template <class T = void>
-struct identity : std::unary_function<T, T>
-{
-    constexpr const T& operator()(const T& x) const { return x;}
-};
-
-template <>
-struct identity<void>
-{
-    template <class T>
-    constexpr auto operator()(T&& x) const
-    _NOEXCEPT_(noexcept(_VSTD::forward<T>(x)))
-    -> decltype        (_VSTD::forward<T>(x))
-        { return        _VSTD::forward<T>(x); }
-};
+const auto identity = [](auto&& x) { return std::forward<decltype(x)>(x); };
 
----------------
mclow.lists wrote:
> CaseyCarter wrote:
> > Pre-existing: the identity transformation is an extremely poor choice for 
> > these `transform_foo` tests since failure to apply the transformation 
> > exactly once to each element does not affect the result of the algorithm.
> I think I'd rather have this. It's constexpr and noexcept, unlike the lambda.
> 
>     struct identity {
>         template <typename T>
>         constexpr auto operator()(T&& x) const
>         noexcept(noexcept(std::forward<T>(x)))
>         -> decltype      (std::forward<T>(x))
>             { return      std::forward<T>(x); }
>     };
> 
I agree about the choice of `identity` as a transform.


https://reviews.llvm.org/D41748



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to