Skip to content

Commit 65fd4ab

Browse files
Add test
1 parent af8f4e5 commit 65fd4ab

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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-parsing
3+
4+
// NOLINTBEGIN
5+
namespace std {
6+
7+
template <typename T> struct remove_reference { using type = T; };
8+
template <typename T> struct remove_reference<T&> { using type = T; };
9+
template <typename T> struct remove_reference<T&&> { using type = T; };
10+
11+
template <typename T> using remove_reference_t = typename remove_reference<T>::type;
12+
13+
template <typename T> constexpr T &&forward(remove_reference_t<T> &t) noexcept;
14+
template <typename T> constexpr T &&forward(remove_reference_t<T> &&t) noexcept;
15+
template <typename T> constexpr remove_reference_t<T> &&move(T &&x);
16+
17+
} // namespace std
18+
// NOLINTEND
19+
20+
template<class T>
21+
constexpr decltype(auto) custom_forward(std::remove_reference_t<T>& tmp) noexcept
22+
{
23+
return static_cast<T&&>(tmp);
24+
}
25+
26+
template<class T>
27+
constexpr decltype(auto) custom_forward(std::remove_reference_t<T>&& tmp) noexcept
28+
{
29+
return static_cast<T&&>(tmp);
30+
}
31+
32+
template<class T>
33+
void 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+
39+
template<class T>
40+
void move_with_custom(T&& t) {
41+
T other{custom_forward<T>(t)};
42+
}

0 commit comments

Comments
 (0)