diff options
author | Jason Merrill <jason@redhat.com> | 2021-08-27 17:28:28 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2021-08-30 16:48:28 -0400 |
commit | e18e56c76be35e6a799e07a01c24e0fff3eb1978 (patch) | |
tree | 766fbe1a70cbdf41dd9b401101eda0e8451d02c6 /libffi/LICENSE | |
parent | 9213ff13247739d6d335064a6b568278a872a991 (diff) | |
download | gcc-e18e56c76be35e6a799e07a01c24e0fff3eb1978.zip gcc-e18e56c76be35e6a799e07a01c24e0fff3eb1978.tar.gz gcc-e18e56c76be35e6a799e07a01c24e0fff3eb1978.tar.bz2 |
c++: Add warning about missing 'requires'
I noticed that concepts-lambda14.C had two useless requires-expressions:
static_assert(requires { C<T>; });
always succeeds, because C<T> is always a valid expression for any type,
regardless of whether C is satisfied for a particular type. Presumably the
user means
static_assert(requires { requires C<T>; });
to make the C<T> a nested-requirement. Of course,
static_assert(C<T>);
is much simpler and means the same thing; this is more relevant in the
middle of a longer requires-expression, such as the bug this warning found
in cmcstl2:
template<class I>
META_CONCEPT input_iterator =
input_or_output_iterator<I> &&
readable<I> &&
requires(I& i, const I& ci) {
typename iterator_category_t<I>;
derived_from<iterator_category_t<I>, input_iterator_tag>;
i++;
};
where 'requires' is missing before 'derived_from'.
gcc/ChangeLog:
* doc/invoke.texi: Document -Wmissing-requires.
gcc/c-family/ChangeLog:
* c.opt: Add -Wmissing-requires.
gcc/cp/ChangeLog:
* parser.c (cp_parser_simple_requirement): Warn about missing
requires.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/concepts-lambda14.C: Add expected warnings.
Diffstat (limited to 'libffi/LICENSE')
0 files changed, 0 insertions, 0 deletions