[PATCH] thread.hpp: Fix redefinition of default argument

Chris Johns chrisj at rtems.org
Sat Mar 19 07:27:21 UTC 2022


Ok to push

Thanks
Chris

> On 19 Mar 2022, at 2:16 am, Sebastian Huber <sebastian.huber at embedded-brains.de> wrote:
> 
> A default argument shall be defined only once.
> 
> Close #4632.
> ---
> cpukit/include/rtems/thread.hpp | 32 ++++++++++++++------------------
> 1 file changed, 14 insertions(+), 18 deletions(-)
> 
> diff --git a/cpukit/include/rtems/thread.hpp b/cpukit/include/rtems/thread.hpp
> index cdef690740..56e301c0bc 100644
> --- a/cpukit/include/rtems/thread.hpp
> +++ b/cpukit/include/rtems/thread.hpp
> @@ -220,6 +220,12 @@ namespace rtems
>       /* affinity, cpu set size is? */
>     };
> 
> +    template <class T>
> +    inline typename std::decay<T>::type
> +    decay_copy(T&& t) {
> +      return std::forward<T>(t);
> +    }
> +
>     /**
>      * @brief Create a thread with thread attributes.
>      *
> @@ -310,7 +316,14 @@ namespace rtems
>        */
>       template <typename A, typename F, typename ...Args,
>                 class = enable_if_attributes<A>>
> -      explicit thread(A&& attr, F&& func, Args&&... args);
> +      explicit thread(A&& attr, F&& func, Args&&... args)
> +        : id_(0) {
> +        start_thread(
> +          make_state(attr,
> +                     make_invoker(decay_copy(std::forward<F>(func)),
> +                                  decay_copy(std::forward<Args>(args))...))
> +        );
> +      }
> 
>       /**
>        * Move the thread id to this instance.
> @@ -428,12 +441,6 @@ namespace rtems
>       void start_thread(state_ptr s);
>     };
> 
> -    template <class T>
> -    inline typename std::decay<T>::type
> -    decay_copy(T&& t) {
> -      return std::forward<T>(t);
> -    }
> -
>     template<typename F, typename... Args>
>     thread::thread(F&& func, Args&&... args)
>       : id_(0)  {
> @@ -445,17 +452,6 @@ namespace rtems
>       );
>     }
> 
> -    template<typename A, typename F, typename... Args,
> -             class = thread::enable_if_attributes<A>>
> -    thread::thread(A&& attr, F&& func, Args&&... args)
> -      : id_(0) {
> -      start_thread(
> -        make_state(attr,
> -                   make_invoker(decay_copy(std::forward<F>(func)),
> -                                decay_copy(std::forward<Args>(args))...))
> -      );
> -    }
> -
>     inline std::thread::id thread::get_id() const noexcept {
>       return std::thread::id(id_.id_);
>     }
> -- 
> 2.34.1
> 



More information about the devel mailing list