brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 7ccac1a Raw
43 lines · cpp
1// RUN: %check_clang_tidy -std=c++14 %s cppcoreguidelines-missing-std-forward %t -- \2// RUN: -config="{CheckOptions: {cppcoreguidelines-missing-std-forward.ForwardFunction: custom_forward}}" -- -fno-delayed-template-parsing3 4// NOLINTBEGIN5namespace std {6 7template <typename T> struct remove_reference      { using type = T; };8template <typename T> struct remove_reference<T&>  { using type = T; };9template <typename T> struct remove_reference<T&&> { using type = T; };10 11template <typename T> using remove_reference_t = typename remove_reference<T>::type;12 13template <typename T> constexpr T &&forward(remove_reference_t<T> &t) noexcept;14template <typename T> constexpr T &&forward(remove_reference_t<T> &&t) noexcept;15template <typename T> constexpr remove_reference_t<T> &&move(T &&x);16 17} // namespace std18// NOLINTEND19 20template<class T>21constexpr decltype(auto) custom_forward(std::remove_reference_t<T>& tmp) noexcept22{23  return static_cast<T&&>(tmp);24}25 26template<class T>27constexpr decltype(auto) custom_forward(std::remove_reference_t<T>&& tmp) noexcept28{29  return static_cast<T&&>(tmp);30}31 32template<class T>33void forward_with_std(T&& t) {34  // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: forwarding reference parameter 't' is never forwarded inside the function body [cppcoreguidelines-missing-std-forward]35 36  T other{std::forward<T>(t)};37}38 39template<class T>40void move_with_custom(T&& t) {41  T other{custom_forward<T>(t)};42}43