1*893d53d1SChris Cotter // RUN: %check_clang_tidy -std=c++20 %s modernize-use-constraints %t -- -- -fno-delayed-template-parsing
2*893d53d1SChris Cotter 
3*893d53d1SChris Cotter // NOLINTBEGIN
4*893d53d1SChris Cotter namespace std {
5*893d53d1SChris Cotter template <bool B, class T = void> struct enable_if { };
6*893d53d1SChris Cotter 
7*893d53d1SChris Cotter template <class T> struct enable_if<true, T> { typedef T type; };
8*893d53d1SChris Cotter 
9*893d53d1SChris Cotter template <bool B, class T = void>
10*893d53d1SChris Cotter using enable_if_t = typename enable_if<B, T>::type;
11*893d53d1SChris Cotter 
12*893d53d1SChris Cotter } // namespace std
13*893d53d1SChris Cotter // NOLINTEND
14*893d53d1SChris Cotter 
15*893d53d1SChris Cotter // Separate test file for the case where the first '>>' token part of
16*893d53d1SChris Cotter // an enable_if expression correctly handles the synthesized token.
17*893d53d1SChris Cotter 
18*893d53d1SChris Cotter template <typename T, typename = std::enable_if_t<T::some_value>>
first_greatergreater_is_enable_if()19*893d53d1SChris Cotter void first_greatergreater_is_enable_if() {
20*893d53d1SChris Cotter }
21*893d53d1SChris Cotter // CHECK-MESSAGES: :[[@LINE-3]]:23: warning: use C++20 requires constraints instead of enable_if [modernize-use-constraints]
22*893d53d1SChris Cotter // CHECK-FIXES: {{^}}void first_greatergreater_is_enable_if() requires T::some_value {{{$}}
23