1// RUN: %check_clang_tidy %s misc-const-correctness %t -- -- -std=c++17 -fno-delayed-template-parsing
2
3template <typename L, typename R>
4struct MyPair {
5 L left;
6 R right;
7 MyPair(const L &ll, const R &rr) : left{ll}, right{rr} {}
8};
9
10void f() {
11 // FIXME: Decomposition Decls need special treatment, because they require to use 'auto'
12 // and the 'const' should only be added if all elements can be const.
13 // The issue is similar to multiple declarations in one statement.
14 // Simply bail for now.
15 auto [np_local0, np_local1] = MyPair<int, int>(42, 42);
16 np_local0++;
17 np_local1++;
18 // CHECK-FIXES-NOT: auto const [np_local0, np_local1]
19
20 auto [np_local2, p_local0] = MyPair<double, double>(42., 42.);
21 np_local2++;
22 // CHECK-FIXES-NOT: auto const [np_local2, p_local0]
23
24 auto [p_local1, np_local3] = MyPair<double, double>(42., 42.);
25 np_local3++;
26 // CHECK-FIXES-NOT: auto const [p_local1, np_local3]
27
28 auto [p_local2, p_local3] = MyPair<double, double>(42., 42.);
29 // CHECK-FIXES-NOT: auto const [p_local2, p_local3]
30}
31
32void g() {
33 int p_local0 = 42;
34 // CHECK-MESSAGES: [[@LINE-1]]:3: warning: variable 'p_local0' of type 'int' can be declared 'const'
35 // CHECK-FIXES: int const p_local0 = 42;
36}
37
38template <typename SomeValue>
39struct DoGooder {
40 DoGooder(void *accessor, SomeValue value) {
41 }
42};
43struct Bingus {
44 static constexpr auto someRandomConstant = 99;
45};
46template <typename Foo>
47struct HardWorker {
48 HardWorker() {
49 const DoGooder<int> anInstanceOf(nullptr, Foo::someRandomConstant);
50 }
51};
52struct TheContainer {
53 HardWorker<Bingus> m_theOtherInstance;
54 // CHECK-FIXES-NOT: HardWorker<Bingus> const m_theOtherInstance
55};
56

source code of clang-tools-extra/test/clang-tidy/checkers/misc/const-correctness-cxx17.cpp