c++: Implement __is_invocable built-in trait
commit7bd33955970202095738e85c4ddf161432ece099
authorKen Matsui <kmatsui@gcc.gnu.org>
Tue, 20 Feb 2024 02:10:16 +0000 (19 18:10 -0800)
committerKen Matsui <kmatsui@gcc.gnu.org>
Sat, 11 May 2024 01:17:52 +0000 (10 18:17 -0700)
tree4dbc1c370f9f4b1d59ca1bae4219c56f7f77d5f0
parent37fad797adea340307fb33c3d7a0a17652063a33
c++: Implement __is_invocable built-in trait

This patch implements built-in trait for std::is_invocable.

gcc/cp/ChangeLog:

* cp-trait.def: Define __is_invocable.
* constraint.cc (diagnose_trait_expr): Handle CPTK_IS_INVOCABLE.
* semantics.cc (trait_expr_value): Likewise.
(finish_trait_expr): Likewise.
* cp-tree.h (build_invoke): New function.
* method.cc (build_invoke): New function.

gcc/testsuite/ChangeLog:

* g++.dg/ext/has-builtin-1.C: Test existence of __is_invocable.
* g++.dg/ext/is_invocable1.C: New test.
* g++.dg/ext/is_invocable2.C: New test.
* g++.dg/ext/is_invocable3.C: New test.
* g++.dg/ext/is_invocable4.C: New test.

Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org>
Reviewed-by: Patrick Palka <ppalka@redhat.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
gcc/cp/constraint.cc
gcc/cp/cp-trait.def
gcc/cp/cp-tree.h
gcc/cp/method.cc
gcc/cp/semantics.cc
gcc/testsuite/g++.dg/ext/has-builtin-1.C
gcc/testsuite/g++.dg/ext/is_invocable1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/is_invocable2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/is_invocable3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/is_invocable4.C [new file with mode: 0644]