Mercurial > hg > CbC > CbC_llvm
view clang/test/SemaTemplate/instantiate-requires-clause.cpp @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | 1d019706d866 |
children | c4bab56944e8 |
line wrap: on
line source
// RUN: %clang_cc1 -std=c++2a -x c++ %s -verify template <typename... Args> requires ((sizeof(Args) == 1), ...) // expected-note@-1 {{because '(sizeof(int) == 1) , (sizeof(char) == 1) , (sizeof(int) == 1)' evaluated to false}} void f1(Args&&... args) { } // expected-note@-1 {{candidate template ignored: constraints not satisfied [with Args = <int, char, int>]}} using f11 = decltype(f1('a')); using f12 = decltype(f1(1, 'b')); using f13 = decltype(f1(1, 'b', 2)); // expected-error@-1 {{no matching function for call to 'f1'}} template <typename... Args> void f2(Args&&... args) requires ((sizeof(args) == 1), ...) { } // expected-note@-1 {{candidate template ignored: constraints not satisfied [with Args = <int, char, int>]}} // expected-note@-2 {{because '(sizeof (args) == 1) , (sizeof (args) == 1) , (sizeof (args) == 1)' evaluated to false}} using f21 = decltype(f2('a')); using f22 = decltype(f2(1, 'b')); using f23 = decltype(f2(1, 'b', 2)); // expected-error@-1 {{no matching function for call to 'f2'}} template <typename... Args> requires ((sizeof(Args) == 1), ...) // expected-note@-1 {{because '(sizeof(int) == 1) , (sizeof(char) == 1) , (sizeof(int) == 1)' evaluated to false}} void f3(Args&&... args) requires ((sizeof(args) == 1), ...) { } // expected-note@-1 {{candidate template ignored: constraints not satisfied [with Args = <int, char, int>]}} using f31 = decltype(f3('a')); using f32 = decltype(f3(1, 'b')); using f33 = decltype(f3(1, 'b', 2)); // expected-error@-1 {{no matching function for call to 'f3'}} template<typename T> struct S { template<typename U> static constexpr auto f(U const index) requires(index, true) { return true; } }; static_assert(S<void>::f(1)); constexpr auto value = 0; template<typename T> struct S2 { template<typename = void> requires(value, true) static constexpr auto f() requires(value, true) { } }; static_assert((S2<int>::f(), true)); template<typename T> struct S3 { template<typename... Args> requires true static constexpr void f(Args...) { } }; static_assert((S3<int>::f(), true)); template<typename T> struct S4 { template<typename> constexpr void foo() requires (decltype(this)(), true) { } constexpr void goo() requires (decltype(this)(), true) { } }; static_assert((S4<int>{}.foo<int>(), S4<int>{}.goo(), true));