Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/concepts/dr1430.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line source
// PR c++/66092 // { dg-do compile { target c++17_only } } // { dg-options "-fconcepts" } #include <type_traits> template <typename T, typename U, typename... Args> requires (sizeof...(Args) == 0) constexpr decltype(auto) check() { return std::integral_constant<bool, __is_same_as(T, U)>(); } template <typename T, typename U, typename... Args> requires (sizeof...(Args) > 0) constexpr decltype(auto) check() { return std::integral_constant<bool, __is_same_as(T, U) && decltype(check<U, Args...>())::value>(); } template <typename T, typename U, typename... Args> concept bool Same() { return decltype(check<T, U, Args...>())::value; } template <typename T, typename U, typename... Args> concept bool Similar = true; template <typename... Args> requires Same<Args...>() // { dg-error "" "" { xfail *-*-* } } void foo( Args... args ) {} // FIXME: The new method of building concept checks is suppressing the // diagnostic for the invalid substitution. This produces an invalid // requires-clause, which still prevents the function from being resolved. template <typename... Args> requires Similar<Args...> // { dg-error "pack expansion" } void bar( Args... args ) {} int main() { foo(1, 2, 3); // { dg-error "" } bar(1, 2, 3); // { dg-error "" } }