c++: Allow parm of empty class type in constexpr.
authorJason Merrill <jason@redhat.com>
Mon, 3 Feb 2020 16:11:55 +0000 (11:11 -0500)
committerJason Merrill <jason@redhat.com>
Mon, 3 Feb 2020 22:50:36 +0000 (17:50 -0500)
commit8fda2c274ac66d60c1dfc1349e9efb4e8c2a3580
tree9c5d0041838e29c8f570733b021348cd3effa683
parent19e43cbce353b63a05c3b7c39d83a2e32c9f911f
c++: Allow parm of empty class type in constexpr.

Since copying a class object is defined in terms of the copy constructor,
copying an empty class is OK even if it would otherwise not be usable in a
constant expression.  Relatedly, using a parameter as an lvalue is no more
problematic than a local variable, and calling a member function uses the
object as an lvalue.

PR c++/91953
* constexpr.c (potential_constant_expression_1) [PARM_DECL]: Allow
empty class type.
[COMPONENT_REF]: A member function reference doesn't use the object
as an rvalue.
gcc/cp/ChangeLog
gcc/cp/constexpr.c
gcc/testsuite/g++.dg/cpp0x/constexpr-empty14.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp1z/constexpr-if12.C