2 // { dg-options "-std=c++17 -fconcepts" }
6 template <typename T, typename U, typename... Args>
7 requires (sizeof...(Args) == 0)
8 constexpr decltype(auto) check()
10 return std::integral_constant<bool, __is_same_as(T, U)>();
13 template <typename T, typename U, typename... Args>
14 requires (sizeof...(Args) > 0)
15 constexpr decltype(auto) check()
17 return std::integral_constant<bool, __is_same_as(T, U)
18 && decltype(check<U, Args...>())::value>();
21 template <typename T, typename U, typename... Args>
24 return decltype(check<T, U, Args...>())::value;
27 template <typename T, typename U, typename... Args>
28 concept bool Similar = true;
30 template <typename... Args>
31 requires Same<Args...>() // { dg-error "invalid reference" }
32 void foo( Args... args ) {}
34 template <typename... Args>
35 requires Similar<Args...> // { dg-error "invalid reference" }
36 void bar( Args... args ) {}
40 foo(1, 2, 3); // { dg-error "cannot call" }
41 bar(1, 2, 3); // { dg-error "cannot call" }