llvm-project/clang/test/FixIt/fixit-constrained-structured-binding.cpp
Erich Keane 07008a8df5 CWG2635: Disallow constrained structured bindings.
CWG2635 prohibits adding a constraint to a structured as a defect
report.  This patch implements that restriction.

Differential Revision: https://reviews.llvm.org/D138852
2022-11-28 14:41:14 -08:00

34 lines
1002 B
C++

// RUN: not %clang_cc1 -std=c++20 -fdiagnostics-parseable-fixits -x c++ %s 2> %t
// RUN: FileCheck %s < %t
template<typename T>
concept UnaryC = true;
template<typename T, typename U>
concept BinaryC = true;
struct S{ int i, j; };
S get_S();
template<typename T>
T get_T();
void use() {
UnaryC auto [a, b] = get_S();
// CHECK: error: decomposition declaration cannot be declared with constrained 'auto'
// CHECK: fix-it:{{.*}}:{16:3-16:10}:""
BinaryC<int> auto [c, d] = get_S();
// CHECK: error: decomposition declaration cannot be declared with constrained 'auto'
// CHECK: fix-it:{{.*}}:{19:3-19:16}:""
}
template<typename T>
void TemplUse() {
UnaryC auto [a, b] = get_T<T>();
// CHECK: error: decomposition declaration cannot be declared with constrained 'auto'
// XCHECK: fix-it:{{.*}}:{26:3-26:10}:""
BinaryC<T> auto [c, d] = get_T<T>();
// CHECK: error: decomposition declaration cannot be declared with constrained 'auto'
// XCHECK: fix-it:{{.*}}:{29:3-29:14}:""
}